NEWS
(Erledigt) http post request für CodeProject.AI calls
-
@ofri2607 Funktioniert jetzt, danke!! Nun habe ich 2 Optionen. D.h. mit node-fetch oder axios
-
Hab nun diesen Zwischenstand. Der aber leider nicht funktioniert.
var fetch = require('node-fetch'); const FormData = require('form-data'); doDetection(); function doDetection() { request.get({url: "http://192.168.178.124/kennzeichen.png", encoding: null}, async function (err, response, body) { if (err) { throw err; } var formData = new FormData(); formData.append('image', body); const response2 = await fetch('http://192.168.178.124:32168/v1/vision/custom/licence-plates', {method: 'POST', body: formData}); const result = await response2.json(); log("Result: " + JSON.stringify(result)) }); }
Fehlermeldung:
javascript.1 (25773) script.js.common.Automatisierungen.KI5_works_better: Result: {"success":false,"error":"Unable to create YOLO detector for model licence-plates","code":500,"command":"custom","moduleId":"ObjectDetectionYolo","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":28}
-
@uwe72
Ich kenne zwar den request / das Thema jetzt nicht, aber ist an sich spannend
Bist du dir sicher das du den body vom callback aus dem request direkt so weiter verarbeiten kannst und keine Aufbereitung (oder ähnliches) dazu brauchst? -
-
@uwe72 sagte in http post request für CodeProject.AI calls:
Fehlermeldung:
Nach einigen Fehlversuchen beim korrekten Parametrieren des POST Requests habe ich es jetzt in NodeRed hinbekommen. Es gibt einen "Deepstack" Node, die die Anfrage offensichtlich korrekt formatiert:
Der Aufruf erfolgt mit
v1/vision/alpr
-
@marc-berg ich schau mir dies heute abend an, wenn ich "zuhause" bin. Danke dafür! Kenne mich mit nodered nicht aus. Kannst du zeigen wie der post request nun bei dir konfiguriert ist oder alternativ fällt dir bei meinem request noch was auf? Vielen Dank und Gruß aus Brasilien
-
@uwe72 sagte in http post request für CodeProject.AI calls:
fällt dir bei meinem request noch was auf?
Probiere es erstmal mit
/v1/image/alpr
oder
/v1/vision/alpr
Dann kommt mindestens mal eine andere Fehlermeldung, denn deine Meldung bekomme ich auch, wenn ich diese URL (...license-plates) benutze.
-
@marc-berg Du hattest recht, es kommt eine andere Fehlermeldung
Das Bild existiert. Habe auch eine Version wo ich das Bild zuerst auf der Festplatte zwischenspeichere. Gleiches Verhalten.
Kann kein Unterschied mehr erkennen zu:
https://www.codeproject.com/AI/docs/api/api_reference.htmlhttp://192.168.178.124:32168/v1/image/alpr --> Funktioniert bei mir nicht.
Hast Du mir noch einen Tipp?
var fetch = require('node-fetch'); const FormData = require('form-data'); doDetection(); function doDetection() { request.get({url: "http://192.168.178.124/kennzeichen.png", encoding: null}, async function (err, response, body) { if (err) { throw err; } var formData = new FormData(); formData.append('upload', body); var url = 'http://192.168.178.124:32168/v1/vision/alpr'; const response2 = await fetch(url, {method: 'POST', body: formData}); const result = await response2.json(); log("Result: " + JSON.stringify(result)); }); }
Neue Fehlermeldung:
javascript.1 (30020) script.js.common.Automatisierungen.KI5_works_better: Result: {"type":"https://tools.ietf.org/html/rfc7231#section-6.5.4","title":"Not Found","status":404,"traceId":"00-7635e33346ec49308c1960652c3a9519-6f9794d0678c038f-00"}
-
@marc-berg Darf ich fragen. welche AI-Server Version du verwendest? Über docker/docker-compose? Falls ja, welches tag? Danke&Grüße
-
@uwe72 sagte in http post request für CodeProject.AI calls:
Falls ja, welches tag?
Ich habe einfach die aktuellste Version mit dem CPU Tag genommen, da ist das Image etwas kleiner. Ich kann mir aber nicht vorstellen, dass es daran liegt. Welche Module sind bei dir installiert?
codeproject: container_name: codeproject image: codeproject/ai-server:cpu-2.4.7 hostname: codeproject restart: unless-stopped networks: test: volumes: - /opt/docker/codeproject/data:/etc/codeproject/ai - /opt/docker/codeproject/modules:/app/modules - /etc/localtime:/etc/localtime:ro ports: - "32168:32168"
EDIT: habe das mal im Javascript Adapter nachgestellt. Dieser Code läuft bei mir, musst du nur noch mit dem Abfragen des Bildes per http ergänzen:
let imageUrl = '/opt/iobroker/1600-1200-max.jpg'; let apiURL = 'http://nuc.fritz.box:32168/v1/vision/alpr'; var request = require('request'); var fs = require('fs'); var options = { method: 'POST', url: apiURL, headers: { 'Content-Type': 'multipart/form-data' }, formData: { image: fs.createReadStream(imageUrl) } }; request(options, function (error, response) { if (error) throw new Error(error); log("Result: "+response.body); });
-
@marc-berg Ganz herzlichen Dank an Dich!!
Jetzt läuft sowohl die Kennzeichenerkennung
javascript.1 (138637) script.js.common.Automatisierungen.DISK_ALPR: Result: {"success":true,"predictions":[{"confidence":0.7975177963574728,"label":"Plate: MUC 0 HF29","plate":"MUC 0 HF29","x_min":450,"y_min":220,"x_max":654,"y_max":260}],"message":"Found Plate: MUC 0 HF29","processMs":166,"inferenceMs":150,"code":200,"command":"alpr","moduleId":"ALPR","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":187}
als auch die Erkennung von spezifischen Personen:
javascript.1 (138637) script.js.common.Automatisierungen.DISK_FACE: Result: {"message":"A face was recognised","count":1,"predictions":[{"confidence":0.9747644662857056,"userid":"Uwe","x_min":433,"y_min":163,"x_max":677,"y_max":504}],"success":true,"inferenceMs":223,"processMs":233,"code":200,"command":"recognize","moduleId":"FaceProcessing","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":238,"processedBy":"localhost"}
Diese Änderungen habe ich - aufgrund deiner Hilfe - noch gemacht:
- In JavaScript deinen Ansatz gewählt über request, statt fetch.
- Zudem speichere ich das Bild noch auf der Festplatte und lese es wieder bevor ich es an den Server (als Stream) sende.. Hier will ich noch optimieren. Es würde mir im Normalfall reichen das Bild im Speicher zu haben
- Das war es vermutlich schon. In Docker hatte ich nun noch exakt deine Version (cpu-2.4.7), statt "latest" verwendet (2.3.2 alpha)
Ich denke auf Basis dessen kann was Gutes erstehen
-
@uwe72 sagte in (Erledigt) http post request für CodeProject.AI calls:
Ich denke auf Basis dessen kann was Gutes erstehen
Ja, coole Sache das. Schön, dass es läuft! Bekommt man eigentlich eleganter raus, welche URL jeweils benutzt werden muss, außer über die Browser Entwicklerkonsole?
-
@marc-berg ich habe alle URs in dem von dir geposteten Link entnommen:
https://www.codeproject.com/AI/docs/api/api_reference.html#license-plate-readerIm AI Server Log kann man noch ein wenig schauen was passiert wenn man die Erkennungen über die Webseite macht.
Sonst habe ich keine Idee.