refact: added detect to predict to class
also defined ObjectDetector as a UseCase
This commit is contained in:
parent
685c57d3a9
commit
d201c36861
@ -1,5 +1,6 @@
|
|||||||
import * as tf from '@tensorflow/tfjs'
|
import * as tf from '@tensorflow/tfjs'
|
||||||
import * as cocossd from '@tensorflow-models/coco-ssd'
|
import * as cocossd from '@tensorflow-models/coco-ssd'
|
||||||
|
import PredictedObject from '../Models/PredictedObject'
|
||||||
|
|
||||||
let instance: ObjectDetector | null = null
|
let instance: ObjectDetector | null = null
|
||||||
|
|
||||||
@ -16,7 +17,19 @@ class ObjectDetector {
|
|||||||
return instance
|
return instance
|
||||||
}
|
}
|
||||||
|
|
||||||
private doesPredictionPassFilterPredicates (prediction: cocossd.DetectedObject): boolean {
|
private convertDetectedToPredictedObjects = (detectedObjects: cocossd.DetectedObject[]) => {
|
||||||
|
const predictedObjects: PredictedObject[] = detectedObjects.map(p => new PredictedObject({
|
||||||
|
xOrigin: p.bbox[0],
|
||||||
|
yOrigin: p.bbox[1],
|
||||||
|
width: p.bbox[2],
|
||||||
|
height: p.bbox[3],
|
||||||
|
class: p.class
|
||||||
|
}))
|
||||||
|
|
||||||
|
return predictedObjects
|
||||||
|
}
|
||||||
|
|
||||||
|
private doesDetectionPassFilterPredicates (prediction: cocossd.DetectedObject): boolean {
|
||||||
let failedPredictions = []
|
let failedPredictions = []
|
||||||
this.filterPredicates.forEach(filter => {
|
this.filterPredicates.forEach(filter => {
|
||||||
if (!filter(prediction)) failedPredictions.push(filter)
|
if (!filter(prediction)) failedPredictions.push(filter)
|
||||||
@ -28,10 +41,11 @@ class ObjectDetector {
|
|||||||
|
|
||||||
public predictImageStream = async (videoImage: ImageData) => {
|
public predictImageStream = async (videoImage: ImageData) => {
|
||||||
const mlModel = await this.loadMlModel()
|
const mlModel = await this.loadMlModel()
|
||||||
const predictions = await mlModel.detect(videoImage)
|
const detectedObjects = await mlModel.detect(videoImage)
|
||||||
const filteredPredictions = predictions.filter(p => this.doesPredictionPassFilterPredicates(p))
|
const filteredDetections = detectedObjects.filter(p => this.doesDetectionPassFilterPredicates(p))
|
||||||
|
const predictions = this.convertDetectedToPredictedObjects(filteredDetections)
|
||||||
|
|
||||||
return filteredPredictions
|
return predictions
|
||||||
}
|
}
|
||||||
|
|
||||||
public async loadMlModel (): Promise<cocossd.ObjectDetection> {
|
public async loadMlModel (): Promise<cocossd.ObjectDetection> {
|
@ -1,16 +0,0 @@
|
|||||||
import { DetectedObject } from "@tensorflow-models/coco-ssd"
|
|
||||||
import PredictedObject from '../Models/PredictedObject'
|
|
||||||
|
|
||||||
const convertDetectedToPredictedObjects = (detectedObjects: DetectedObject[]) => {
|
|
||||||
const predictedObjects: PredictedObject[] = detectedObjects.map(p => new PredictedObject({
|
|
||||||
xOrigin: p.bbox[0],
|
|
||||||
yOrigin: p.bbox[1],
|
|
||||||
width: p.bbox[2],
|
|
||||||
height: p.bbox[3],
|
|
||||||
class: p.class
|
|
||||||
}))
|
|
||||||
|
|
||||||
return predictedObjects
|
|
||||||
}
|
|
||||||
|
|
||||||
export default convertDetectedToPredictedObjects
|
|
@ -1,8 +1,7 @@
|
|||||||
import { DetectedObject } from "@tensorflow-models/coco-ssd"
|
import { DetectedObject } from "@tensorflow-models/coco-ssd"
|
||||||
import PredictedObjectCollectionController from "./Controllers/PredictedObjectCollectionController"
|
import PredictedObjectCollectionController from "./Controllers/PredictedObjectCollectionController"
|
||||||
import VideoController from './Controllers/VideoController'
|
import VideoController from './Controllers/VideoController'
|
||||||
import ObjectDetector from './Models/ObjectDetector'
|
import ObjectDetector from './UseCases/ObjectDetector'
|
||||||
import convertDetectedtoPredictedObject from './UseCases/convertDetectedToPredictedObjects'
|
|
||||||
|
|
||||||
const defaultPredictions = [
|
const defaultPredictions = [
|
||||||
(prediction: DetectedObject) => prediction.score > 0.6,
|
(prediction: DetectedObject) => prediction.score > 0.6,
|
||||||
@ -29,8 +28,7 @@ class App {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const detectedObjects: DetectedObject[] = await this.objectDetector.predictImageStream(imageData)
|
const predictedObjects = await this.objectDetector.predictImageStream(imageData)
|
||||||
const predictedObjects = convertDetectedtoPredictedObject(detectedObjects)
|
|
||||||
this.predictedObjectCollectionController.predictedObjects = predictedObjects
|
this.predictedObjectCollectionController.predictedObjects = predictedObjects
|
||||||
|
|
||||||
window.requestAnimationFrame(this.predictImage)
|
window.requestAnimationFrame(this.predictImage)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user