feat: object locator

This commit is contained in:
Joshua Shoemaker 2021-01-16 22:33:47 -06:00
parent d201c36861
commit 01c758b207
2 changed files with 46 additions and 1 deletions

View File

@ -0,0 +1,37 @@
import PredictedObject from "../Models/PredictedObject"
import Video from "../Models/Video"
interface Offset {
x: number,
y: number,
hypotenuse: number
}
class ObjectLocator {
private video: Video
constructor (video: Video) {
this.video = video
}
detectPredictedObjectLocationFromVideo = (predictedObject: PredictedObject): Offset => {
const videoCenter = { x: this.video.width / 2, y: this.video.height / 2 }
const objectCenter = {
x: predictedObject.xOrigin + (predictedObject.width / 2),
y: predictedObject.yOrigin + (predictedObject.height / 2)
}
const xOffset = videoCenter.x - objectCenter.x
const yOffset = videoCenter.y - objectCenter.y
const objectOffsetFromVideoCenter = {
x: xOffset,
y: yOffset,
hypotenuse: Math.sqrt((xOffset * xOffset) + (yOffset * yOffset))
}
return objectOffsetFromVideoCenter
}
}
export default ObjectLocator

View File

@ -2,21 +2,24 @@ import { DetectedObject } from "@tensorflow-models/coco-ssd"
import PredictedObjectCollectionController from "./Controllers/PredictedObjectCollectionController"
import VideoController from './Controllers/VideoController'
import ObjectDetector from './UseCases/ObjectDetector'
import ObjectLocator from "./UseCases/ObjectLocator"
const defaultPredictions = [
(prediction: DetectedObject) => prediction.score > 0.6,
(prediction: DetectedObject) => prediction.class === 'cat',
(prediction: DetectedObject) => prediction.class === 'person', // TODO: change to cat
]
class App {
private predictedObjectCollectionController: PredictedObjectCollectionController
private videoController: VideoController
private objectDetector: ObjectDetector
private objectLocator: ObjectLocator
constructor () {
this.objectDetector = new ObjectDetector({ filterPredicates: defaultPredictions })
this.predictedObjectCollectionController = new PredictedObjectCollectionController()
this.videoController = new VideoController({ width: 640, height: 480 })
this.objectLocator = new ObjectLocator(this.videoController.model)
this.predictImage()
}
@ -30,6 +33,11 @@ class App {
const predictedObjects = await this.objectDetector.predictImageStream(imageData)
this.predictedObjectCollectionController.predictedObjects = predictedObjects
const offsets = predictedObjects.map(obj => {
return this.objectLocator.detectPredictedObjectLocationFromVideo(obj)
})
console.log(offsets)
window.requestAnimationFrame(this.predictImage)
}