Category: Artificial Intelligence
Real Time AI Face Landmark Detection in 20 Minutes with Tensorflow.JS and React
This is the best tutorial on using face landmark detection that I’ve seen so far.
Build the site with:
npm run build
Building AI-Powered Virtual Collaboration and Content Creation Solutions with NVIDIA Maxine
[Alex Qi] Eye contact (coming soon): Simulates eye contact by estimating and aligning gaze with the camera.
Eye tracking to release Q2/Q3. [Maxine Early Access]
Look at:
Face landmark tracking
Face tracking Sample
Descript
[Descript] automatically transcribes and overdubs your audio recordings for quick editing and removing mistakes from your presentations.
[Feature Request] to add Web Cam support.
AI Text and Code Generation with GPT Neo and Python | GPT3 Clone
This is nuts. You can have AI complete your sentences for you and it understands the context of what you said really well.
Misty: The Making of NVIDIA’s 3D AI Assistant
James Burton – Testing Brain-Computer Interfaces
Neuralink: Elon Musk’s entire brain chip presentation in 14 minutes (supercut)
Synthesizing High-Resolution Images with StyleGAN2
The Age of A.I.
Playlist
Pandora Bots
[pandorabots.com] has a free sandbox for creating AIML (artificial intelligence markup language).
Machine Learning Models
Emotiv MN8
Let us hope the SDK and raw EEG access is free with the new [Emotiv MN8] product.

First Deep Learning-Based 3D Simulation of the Universe
Tiny Machine Learning on the Edge with TensorFlow Lite Running on SAMD51
Neuroscience with Azure Machine Learning
TEDDY! – ARTIFICIAL INTELLIGENCE – (A.I)
Supercharge your Computer Vision models with the TensorFlow Object Detection API
Console App for Chrome Speech Proxy
I created a repo for [Console App for Chrome Speech Proxy] which is able to build for Mac and Windows. .Net Windows.Forms hasn’t been implemented for Mac yet…
Dr. Sbaitso in CodeName One
Shai Almog created a [demo app tutorial] that recreates the old “Dr. Sbaitso” app as a CodeName One project. “Dr. Sbaitso” was a text to speech demo app that shipped with Sound Blaster audio cards back in the 90s.
Source: [AI.java]
Source: [DrSbaitso.java]
Allen Cell Explorer
[Allen Cell Explorer] lets users browse detailed 3d scans of brain cells online. [nvidia]
Mastering StarCraft with AI
Visual Studio on Mac
The [Visual Studio Preview for Mac] is available.
Note: SCPlugin is not supported. [uninstall]
Visual Studio has detected that SCPlugin (scplugin.tigris.org) is installed. SCPlugin is a Subversion extension for Finder that is known to cause crashes in Visual Studio andother applications running on Mac OSX 10.9 (Mavericks) or upper. Please uninstall SCPlugin before proceeding.
Developer News:
[Cognitive Services – Enable Natural Language Interaction with LUIS]
Modeling with Speech Commands in Edit Mode in the Unity Editor
Documentation: [UnityWebGLSpeechDetection] [private]
Documentation: [UnityWebGLSpeechSynthesis] [private]
Unity: Speech Detection and Synthesis Together
To be able to call out “fire” and “stop”, I made some edits to the `F3DPlayerTurretController.cs` script.
using UnityEngine; using System.Collections; using UnityWebGLSpeechDetection; namespace Forge3D { public class F3DPlayerTurretController : MonoBehaviour { RaycastHit hitInfo; // Raycast structure public F3DTurret turret; bool isFiring; // Is turret currently in firing state public F3DFXController fxController; // reference to the proxy private ISpeechDetectionPlugin _mSpeechDetectionPlugin = null; enum FireState { IDLE, DETECTED_FIRE, FIRE_ONCE, FIRE_IDLE, DETECTED_STOP, STOP_ONCE } // detect the word once in all updates private static FireState _sFireState = FireState.IDLE; // make sure all turrets detect the async word in their update event private static bool _sReadyForLateUpdate = false; // init the speech proxy private IEnumerator Start() { // get the singleton instance _mSpeechDetectionPlugin = ProxySpeechDetectionPlugin.GetInstance(); // check the reference to the plugin if (null == _mSpeechDetectionPlugin) { Debug.LogError("Proxy Speech Detection Plugin is not set!"); yield break; } // wait for plugin to become available while (!_mSpeechDetectionPlugin.IsAvailable()) { yield return null; } // subscribe to events _mSpeechDetectionPlugin.AddListenerOnDetectionResult(HandleDetectionResult); // abort and clear existing words _mSpeechDetectionPlugin.Abort(); } // Handler for speech detection events void HandleDetectionResult(object sender, SpeechDetectionEventArgs args) { if (null == args.detectionResult) { return; } SpeechRecognitionResult[] results = args.detectionResult.results; if (null == results) { return; } bool doAbort = false; foreach (SpeechRecognitionResult result in results) { SpeechRecognitionAlternative[] alternatives = result.alternatives; if (null == alternatives) { continue; } foreach (SpeechRecognitionAlternative alternative in alternatives) { if (string.IsNullOrEmpty(alternative.transcript)) { continue; } string lower = alternative.transcript.ToLower(); Debug.LogFormat("Detected: {0}", lower); if (lower.Contains("fire")) { if (_sFireState == FireState.IDLE) { _sFireState = FireState.DETECTED_FIRE; } doAbort = true; } if (lower.Contains("stop")) { if (_sFireState == FireState.FIRE_IDLE) { _sFireState = FireState.DETECTED_STOP; } doAbort = true; } } } // abort detection on match for faster matching on words instead of complete sentences if (doAbort) { _mSpeechDetectionPlugin.Abort(); } } // make the async detected word, detectable at the start of all the update events void LateUpdate() { if (_sReadyForLateUpdate) { _sReadyForLateUpdate = false; switch (_sFireState) { case FireState.DETECTED_FIRE: _sFireState = FireState.FIRE_ONCE; break; case FireState.FIRE_ONCE: _sFireState = FireState.FIRE_IDLE; break; case FireState.DETECTED_STOP: _sFireState = FireState.STOP_ONCE; break; case FireState.STOP_ONCE: _sFireState = FireState.IDLE; break; } } } void Update() { CheckForTurn(); CheckForFire(); // After update, use one late update to detect the async word _sReadyForLateUpdate = true; } void CheckForFire() { // Fire turret //if (!isFiring && Input.GetKeyDown(KeyCode.Mouse0)) if (!isFiring && _sFireState == FireState.FIRE_ONCE) { isFiring = true; fxController.Fire(); } // Stop firing //if (isFiring && Input.GetKeyUp(KeyCode.Mouse0)) if (isFiring && _sFireState == FireState.STOP_ONCE) { isFiring = false; fxController.Stop(); } }
To be able to call out the names of weapons and to add speech, I made some edits to the `F3DFXController` script.
using System.Collections; using System; using UnityEngine; using UnityEngine.UI; using UnityWebGLSpeechDetection; using UnityWebGLSpeechSynthesis; namespace Forge3D { // Weapon types public enum F3DFXType { Vulcan, SoloGun, Sniper, ShotGun, Seeker, RailGun, PlasmaGun, PlasmaBeam, PlasmaBeamHeavy, LightningGun, FlameRed, LaserImpulse } public class F3DFXController : MonoBehaviour { /// <summary> /// Voices drop down /// </summary> public Dropdown _mDropdownVoices = null; /// <summary> /// Reference to the proxy /// </summary> private ISpeechDetectionPlugin _mSpeechDetectionPlugin = null; /// <summary> /// Reference to the proxy /// </summary> private ISpeechSynthesisPlugin _mSpeechSynthesisPlugin = null; /// <summary> /// Reference to the supported voices /// </summary> private VoiceResult _mVoiceResult = null; /// <summary> /// Reference to the utterance, voice, and text to speak /// </summary> private SpeechSynthesisUtterance _mSpeechSynthesisUtterance = null; /// <summary> /// Track when the utterance is created /// </summary> private bool _mUtteranceSet = false; /// <summary> /// Track when the voices are created /// </summary> private bool _mVoicesSet = false; enum WeaponState { IDLE, DETECTED_LEFT, LEFT_ONCE, DETECTED_RIGHT, RIGHT_ONCE } // detect the word once in all updates private static WeaponState _sWeaponState = WeaponState.IDLE; // make sure all turrets detect the async word in their update event private static bool _sReadyForLateUpdate = false; // Singleton instance public static F3DFXController instance; // init the speech proxy private IEnumerator Start() { // get the singleton instance _mSpeechDetectionPlugin = ProxySpeechDetectionPlugin.GetInstance(); // check the reference to the plugin if (null == _mSpeechDetectionPlugin) { Debug.LogError("Proxy Speech Detection Plugin is not set!"); yield break; } // wait for plugin to become available while (!_mSpeechDetectionPlugin.IsAvailable()) { yield return null; } _mSpeechSynthesisPlugin = ProxySpeechSynthesisPlugin.GetInstance(); if (null == _mSpeechSynthesisPlugin) { Debug.LogError("Proxy Speech Synthesis Plugin is not set!"); yield break; } // wait for proxy to become available while (!_mSpeechSynthesisPlugin.IsAvailable()) { yield return null; } // subscribe to events _mSpeechDetectionPlugin.AddListenerOnDetectionResult(HandleDetectionResult); // abort and clear existing words _mSpeechDetectionPlugin.Abort(); // Get voices from proxy GetVoices(); // Create an instance of SpeechSynthesisUtterance _mSpeechSynthesisPlugin.CreateSpeechSynthesisUtterance((utterance) => { //Debug.LogFormat("Utterance created: {0}", utterance._mReference); _mSpeechSynthesisUtterance = utterance; // The utterance is set _mUtteranceSet = true; // Set the default voice if ready SetIfReadyForDefaultVoice(); }); } /// <summary> /// Get voices from the proxy /// </summary> /// <returns></returns> private void GetVoices() { // get voices from the proxy _mSpeechSynthesisPlugin.GetVoices((voiceResult) => { _mVoiceResult = voiceResult; // prepare the voices drop down items SpeechSynthesisUtils.PopulateVoicesDropdown(_mDropdownVoices, _mVoiceResult); // The voices are set _mVoicesSet = true; // Set the default voice if ready SetIfReadyForDefaultVoice(); }); } /// <summary> /// Set the default voice if voices and utterance are ready /// </summary> private void SetIfReadyForDefaultVoice() { if (_mVoicesSet && _mUtteranceSet) { // set the default voice SpeechSynthesisUtils.SetDefaultVoice(_mDropdownVoices); // enable voices dropdown SpeechSynthesisUtils.SetInteractable(true, _mDropdownVoices); Voice voice = SpeechSynthesisUtils.GetVoice(_mVoiceResult, SpeechSynthesisUtils.GetDefaultVoice()); _mSpeechSynthesisPlugin.SetVoice(_mSpeechSynthesisUtterance, voice); // drop down reference must be set if (_mDropdownVoices) { // set up the drop down change listener _mDropdownVoices.onValueChanged.AddListener(delegate { // handle the voice change event, and set the voice on the utterance SpeechSynthesisUtils.HandleVoiceChanged(_mDropdownVoices, _mVoiceResult, _mSpeechSynthesisUtterance, _mSpeechSynthesisPlugin); }); } } } /// <summary> /// Speak the utterance /// </summary> private void Speak(string text) { if (!_mVoicesSet || !_mUtteranceSet) { // not ready return; } // Cancel if already speaking _mSpeechSynthesisPlugin.Cancel(); // Set the text that will be spoken _mSpeechSynthesisPlugin.SetText(_mSpeechSynthesisUtterance, text); // Use the plugin to speak the utterance _mSpeechSynthesisPlugin.Speak(_mSpeechSynthesisUtterance); } // Handler for speech detection events void HandleDetectionResult(object sender, SpeechDetectionEventArgs args) { if (null == args.detectionResult) { return; } SpeechRecognitionResult[] results = args.detectionResult.results; if (null == results) { return; } bool doAbort = false; foreach (SpeechRecognitionResult result in results) { SpeechRecognitionAlternative[] alternatives = result.alternatives; if (null == alternatives) { continue; } foreach (SpeechRecognitionAlternative alternative in alternatives) { if (string.IsNullOrEmpty(alternative.transcript)) { continue; } string lower = alternative.transcript.ToLower(); Debug.LogFormat("Detected: {0}", lower); if (lower.Contains("left")) { if (_sWeaponState == WeaponState.IDLE) { _sWeaponState = WeaponState.DETECTED_LEFT; } doAbort = true; break; } else if (lower.Contains("right")) { if (_sWeaponState == WeaponState.IDLE) { _sWeaponState = WeaponState.DETECTED_RIGHT; } doAbort = true; break; } else if (lower.Contains("lightning")) { if (DefaultFXType != F3DFXType.LightningGun) { DefaultFXType = F3DFXType.LightningGun; Speak(string.Format("{0} is active, sir", DefaultFXType)); } doAbort = true; break; } else if (lower.Contains("beam")) { if (DefaultFXType != F3DFXType.PlasmaBeam) { DefaultFXType = F3DFXType.PlasmaBeam; Speak(string.Format("{0} is active, sir", DefaultFXType)); } doAbort = true; break; } } } // abort detection on match for faster matching on words instead of complete sentences if (doAbort) { _mSpeechDetectionPlugin.Abort(); } } // make the async detected word, detectable at the start of all the update events void LateUpdate() { if (_sReadyForLateUpdate) { _sReadyForLateUpdate = false; switch (_sWeaponState) { case WeaponState.DETECTED_LEFT: _sWeaponState = WeaponState.LEFT_ONCE; break; case WeaponState.LEFT_ONCE: _sWeaponState = WeaponState.IDLE; break; case WeaponState.DETECTED_RIGHT: _sWeaponState = WeaponState.RIGHT_ONCE; break; case WeaponState.RIGHT_ONCE: _sWeaponState = WeaponState.IDLE; break; } } } void Update() { // Switch weapon types using keyboard keys //if (Input.GetKeyDown(KeyCode.RightArrow)) if (_sWeaponState == WeaponState.LEFT_ONCE) NextWeapon(); //else if (Input.GetKeyDown(KeyCode.LeftArrow)) if (_sWeaponState == WeaponState.RIGHT_ONCE) PrevWeapon(); // After update, use one late update to detect the async word _sReadyForLateUpdate = true; }