Link trained model: https://teachablemachine.withgoogle.com/models/xn12VJXSr/
Trained Model HTML code : <div>Teachable Machine Audio Model</div>
<button type="button" onclick="init()">Start Recognition</button>
<button type="button" onclick="connect()">Connect to Arduino</button>
<div id="label-container"></div>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands@0.4.0/dist/speech-commands.min.js"></script>
<script type="text/javascript">
const URL = "https://teachablemachine.withgoogle.com/models/xn12VJXSr/";
let recognizer;
let port, writer;
async function createModel() {
const checkpointURL = URL + "model.json";
const metadataURL = URL + "metadata.json";
recognizer = speechCommands.create("BROWSER_FFT", undefined, checkpointURL, metadataURL);
await recognizer.ensureModelLoaded();
return recognizer;
}
async function init() {
recognizer = await createModel();
const classLabels = recognizer.wordLabels();
const labelContainer = document.getElementById("label-container");
for (let i = 0; i < classLabels.length; i++) {
labelContainer.appendChild(document.createElement("div"));
}
recognizer.listen(result => {
for (let i = 0; i < classLabels.length; i++) {
const classPrediction = classLabels[i] + ": " + result.scores[i].toFixed(2);
labelContainer.childNodes[i].innerHTML = classPrediction;
}
// Decide based on prediction
const noiseScore = result.scores[0];
const gunshotScore = result.scores[1];
if (gunshotScore > 0.75) {
sendToArduino("gunshot\n");
} else if (noiseScore > 0.75) {
sendToArduino("noise\n");
}
}, {
probabilityThreshold: 0.75,
overlapFactor: 0.5
});
}
// Connect to Arduino via Web Serial API
async function connect() {
try {
port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
writer = port.writable.getWriter();
alert("Connected to Arduino!");
} catch (err) {
console.error("Connection failed: ", err);
}
}
async function sendToArduino(message) {
if (writer) {
const encoder = new TextEncoder();
await writer.write(encoder.encode(message));
}
}
</script>
Arduino code:
int redLED = 7; // Red LED for noise
int greenLED = 8; // Green LED for gunshot
void setup() {
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "noise") {
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
}
else if (command == "gunshot") {
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
}
else {
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
}
}
}
No comments:
Post a Comment