Voice Recognition for Wayfinding

May 5, 2023

We are currently developing voice recognition feature for 3D Wayfinder. It will allow visitors to use wayfinding software without using touch-screens. Just say where you would like to go and wayfinder software will show you the way.

Voice recognition is becoming more popular and as the quality recognizing words is becoming better and mobile screens becoming smaller. It would be convenient to use voice orders instead of using touch-screens. Of course, there are privacy issues, as most of the voice recognition is done in servers. But for wayfinding software this is not an issue, as the wayfinding screens are public and nobody will make their private conversations near wayfinding screens.

How voice recognition for wayfinding works?

Let’s say you are looking for closest exit, toilet or just want to get a beer. So you just say “Exit”, “Closest toilet” or “Wayfinder, where can I get beer” and 3D Wayfinder can show you the route.

3D Wayfinder will use keywords and location names for voice recognition, the same way search functionality works. More keywords defined in wayfinder make the vocabulary larger. But definitely there will be AI implement in future. This will give much more possibilities. For example visitors canaska pint of Budweiser without “Budweiser” being entered as a keyword and still get to place where they can buy beer. Might be that the beer is not sold by pint. But at least they can get beer.

We can use languages for voice recognition, that are select in Wayfinder software. Languages can be add under settings in 3D Wayfinder administration panel. If possible, voice recognition can be active for all languages simultaniously. If not, we can use default language for voice recognition without selecting anything. After selecting prefered language wayfinder can switch also language for voice recognition. This depends capabilities of kiosk or touch-screen PC. Also, the challenge is to filter out background noise as wayfinder screens are usually in main entries and places where are more people around.

In future, voice recognition in wayfinding software will be available for all customers. It has to be turn on under settings and it would also require template that allows voice search. We will add this feature to our basic templates. So far, we can implement it in custom templates. So if you order custom template from us, we can also make search by voice available.

« »

3D Wayfinder Summer Sales Has Started, Are You Ready?

May 11, 2022

This summer we have big discount campaign for our new and old clients. It is best time to order 3D
wayfinder for your kiosk or update your old maps to new and exciting ones. This is a truly an opportunity you can’t miss out!

3D Wayfinder campaign starts: 10th May and last till 1st of September.


Campaign conditions: when you order 3D or 2D map you will get our software free for a one
whole year or get huge discount from our lifetime license. We have also not forgotten our loyal
clients! If you want to update your old map we will offer you discounts like SaaS software license
for free entire year. Or, huge discount if you are lifetime license owner and want to update old maps.

For new clients we will offer:

  • for SaaS solution 1 year free license;
  • for lifetime license we have -900$ discount.

Interested to update your wayfinder map:

  • want to update your old maps then please contact sales and we guarantee free software for 1 year;
  • for lifetime license owners we have great option to update old 2D map to 3D map or
    update your old 3D maps to premium maps with 35% discount. Let’s give a new life to your
    wayfinder kiosks!

3D Wayfinder map update conditions:

  • 2D map ➜ 3D lite, standard or premium;
  • 3D lite map ➜ 3D premium;
  • 3D standard map ➜ 3D premium.

Find out the difference between 3D lite, standard and premium HERE

Looking more information before making decision

  • Check out our manual and user account possibilities HERE. You can discover more about navigation, projects, floor, materials, textures, locations, groups, 3D floor plan editor and project settings.
  • Find out how to get started with 3D floor plan creation HERE. You will learn about 3D maps, material and models.
  • Need help? Our tutorials are HERE. For example you can find out how to setup 3D Wayfinder app for kiosks.

Ready to order?

New clients please will our quote HERE
Already a client contact us at sales@3dwayfinder.com

« »

Creating Your 3D Visualizations Paths is Now Easier

September 12, 2016

Hello 3D Wayfinder users, we have put together an instruction for you to make adding locations faster and simpler. Creating your 3D visualizations paths its easier than ever before with 3D Wayfinder.

The following information diagram shows how to add locations to your floor plans step-by-step. After adding the locations you can link them to your wayfinding paths.

The first graphic shows you how to add a location to the list of locations:

3D_visualizations_paths_in_3D_Wayfinder_admin_panel

The second graphic displays the instructions how to link the roof of the location in your floor plans to the Point of Intrest in your locations list :

3D_visualization_paths_when_adding_a_new_store

Following these instructions you will be able to add locations to the 3D Wayfinder software in a couple of minutes.

Good luck in creating your 3D visualizations paths!

« »

3D Interactive Floor Plan Demo

September 8, 2015

Check out our new 3D Wayfinder platform demo. This will give you short overview of what you can do with 3D Wayfinder and what are our API capabilities.

The demo has following topics:

  1. Moving 3D map with mouse cursor or touch screen.
  2. Clicking on the map and getting location name and description.
  3. Changing floors of the building.
  4. Showing path between 2 locations.

Demo is accessible from the 3D wayfinder home page and can be opened also from this link:

[xyz-ihs snippet=”3D-demo”]

Demo is based on following javascript code. You are welcome to use it in your projects, your HTML should contain canvas with ID “map”. For more info please see 3D Wayfinder embedding tutorial.

var wayfinder;
var map;
var mapContainer;
var poiInfo;
var tutorialArea;
var currentStep = 0;
var STEPCOUNT = 3;
var originals = {};
var floors = {};

function mapResize(){
	if(wayfinder){
		cont = mapContainer.find(".map-area");
		map.attr("width", cont.css("width"));
		map.attr("height", cont.css("height"));
		wayfinder.resize();
	}
}

function runDemo(){
	map = $('#map');
	poiInfo = mapContainer.find("#poiInfo");
	tutorialArea = mapContainer.find(".tutorial-box");
	wayfinder = new Wayfinder3D();
	wayfinder.options.assetsLocation = '//static.3dwayfinder.com/shared/';
	wayfinder.open("1a07bdc53edb3828f390bc9af7281585");
	setTimeout(mapResize, 150);

	wayfinder.cbOnProgress = function(percentage){
		$("#progression").css('width', percentage * 100+'%');
	};

	wayfinder.cbOnDataLoaded = function(){
	    mapContainer.find(".loading-screen").hide(100);
	};

	wayfinder.cbOnMapReady = function(){
		removeAllFunctionality();
		setText(0);
		stepTutorialButtons(0);
	};
}

function stepTutorialButtons(step) {
	var prev = tutorialArea.find(".tutorial-prev");
	var next = tutorialArea.find(".tutorial-next");

	if (prev.text() && step === 0)
		prev.text("").off("click").css("cursor", "auto");
	else if (!(prev.text()) && step !== 0)
		prev.text("<").click(previousStep).css("cursor", "pointer");

	if (next.text() && step === STEPCOUNT)
		next.text("").off("click").css("cursor", "auto");
	else if (!(next.text()) && step !== STEPCOUNT)
		next.text(">").click(nextStep).css("cursor", "pointer");
}

function removeAllFunctionality() {
	if (wayfinder) {
		if (wayfinder.poiController) {
			originals.onPOIClick = wayfinder.poiController.onPOIClick;
			wayfinder.poiController.onPOIClick = function(poi, position, event) {};
		}
		originals.cbOnPOIClick = wayfinder.cbOnPOIClick;
		wayfinder.cbOnPOIClick = function(poi) {};
	}
}

function setText(step) {
	var keep = tutorialArea.find(".tutorial-text").find(".keep");
	if (keep.length)
		keep = keep.detach();
	switch (step) {
		case 0:
			tutorialArea.find(".tutorial-text").text("Click and drag on the map to move or rotate.");
			break;

		case 1:
			tutorialArea.find(".tutorial-text").text("Click on a location for more info.");
			break;

		case 2:
			tutorialArea.find(".tutorial-text").text("Click on a button to show that floor.");
			break;

		case 3:
			tutorialArea.find(".tutorial-text").text("Click on the button to show the path between two random locations.");
			break;

		default:
			break;
	}
	if (keep.length)
		tutorialArea.find(".tutorial-text").append(keep);
	stepTutorialButtons(step);
}

function addFunctionality(step) {
	switch (step) {
		case 1:
			if (wayfinder && wayfinder.poiController) {
				wayfinder.poiController.onPOIClick = originals.onPOIClick;
				wayfinder.cbOnPOIClick = function(poi) {
					poiInfo.show(100);
					poiInfo.find(".title").text(poi.getName("en"));
					var poiDescription = poi.getDescription("en");
					if (poiDescription)
						poiInfo.find(".description").text(poi.getDescription("en"));
					else
						poiInfo.find(".description").text("");
				};
			}
			break;

		case 2:
			poiInfo.hide(100);
			poiInfo.find(".title").text("");
			poiInfo.find(".description").text("");

			if (wayfinder) {
				var showFloor = function() {
					var f = $(this).attr("data-floor");
					if (f in floors)
						wayfinder.showFloor(floors[f]);
				};
				var fs = wayfinder.building.getFloors();
				tutorialArea.find(".tutorial-text").html("<div class='keep'></div>");
				var floorsMenu = tutorialArea.find(".tutorial-text").find(".keep");
				for (var i in fs) {
					if (fs[i] && fs[i].showInMenu) {
						floors[i] = fs[i];
						var button = $("<button data-floor='"+i+"'>"+fs[i].getName("en")+"</button>").click(showFloor);
						floorsMenu.append(button);
					}
				}
			}
			break;

		case 3:
			if (wayfinder && wayfinder.logic) {
				var randomPath = function(times) {
					if (typeof times !== 'number')
						times = 1;
					if (times > 9)
						return;
					var poiList = wayfinder.pois;
					var poiIDs = [];
					for (var i in poiList) {
						poiIDs.push(i);
					}
					var rand1, rand2;
					while (!rand1 || !(poiList[rand1].getNode())) {
						rand1 = rand2 = poiIDs[Math.floor(Math.random() * poiIDs.length)];
					}
					while (rand2 == rand1 || !(poiList[rand2].getNode())) {
						rand2 = poiIDs[Math.floor(Math.random() * poiIDs.length)];
					}
					rand1 = poiList[rand1].getNode();
					rand2 = poiList[rand2].getNode();
					try {
						wayfinder.logic.showPath(rand1.id, rand2.id);
					}
					catch (e) {
						// Try again
						randomPath(times + 1);
					}
				};
				tutorialArea.find(".tutorial-text").html("<div class='keep'></div>");
				var area = tutorialArea.find(".tutorial-text").find(".keep");
				var pathButton = $("<button>Show random path</button>").click(randomPath);
				area.append(pathButton);
			}
			break;

		default:
			break;
	}
}

function removeFunctionality(step) {
	switch (step) {
		case 1:
			if (wayfinder && wayfinder.poiController) {
				wayfinder.poiController.clearHighlights();
				poiInfo.hide(100);
				poiInfo.find(".title").text("");
				poiInfo.find(".description").text("");
				wayfinder.poiController.onPOIClick = function(poi, position, event) {};
				wayfinder.cbOnPOIClick = function(poi) {};
			}
			break;

		case 2:
			tutorialArea.find(".tutorial-text").find(".keep").remove();
			break;

		case 3:
			addFunctionality(2);
			break;

		default:
			break;
	}
}

function previousStep() {
	if (currentStep === 0)
		return;
	removeFunctionality(currentStep);
	currentStep--;
	setText(currentStep);
}

function nextStep() {
	if (currentStep === STEPCOUNT)
		return;
	currentStep++;
	addFunctionality(currentStep);
	setText(currentStep);
}

$(function(){
	mapContainer = $("#demoMap");
	$(".home-video").click(function () {
		mapContainer.show(100);

		if(!wayfinder)
			runDemo();
		else
			wayfinder.engine.run();

		$(window).resize(mapResize);
	});
});

« »