feat: object locator
This commit is contained in:
parent
d201c36861
commit
01c758b207
37
src/UseCases/ObjectLocator.ts
Normal file
37
src/UseCases/ObjectLocator.ts
Normal 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
|
10
src/app.ts
10
src/app.ts
@ -2,21 +2,24 @@ 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 './UseCases/ObjectDetector'
|
import ObjectDetector from './UseCases/ObjectDetector'
|
||||||
|
import ObjectLocator from "./UseCases/ObjectLocator"
|
||||||
|
|
||||||
const defaultPredictions = [
|
const defaultPredictions = [
|
||||||
(prediction: DetectedObject) => prediction.score > 0.6,
|
(prediction: DetectedObject) => prediction.score > 0.6,
|
||||||
(prediction: DetectedObject) => prediction.class === 'cat',
|
(prediction: DetectedObject) => prediction.class === 'person', // TODO: change to cat
|
||||||
]
|
]
|
||||||
|
|
||||||
class App {
|
class App {
|
||||||
private predictedObjectCollectionController: PredictedObjectCollectionController
|
private predictedObjectCollectionController: PredictedObjectCollectionController
|
||||||
private videoController: VideoController
|
private videoController: VideoController
|
||||||
private objectDetector: ObjectDetector
|
private objectDetector: ObjectDetector
|
||||||
|
private objectLocator: ObjectLocator
|
||||||
|
|
||||||
constructor () {
|
constructor () {
|
||||||
this.objectDetector = new ObjectDetector({ filterPredicates: defaultPredictions })
|
this.objectDetector = new ObjectDetector({ filterPredicates: defaultPredictions })
|
||||||
this.predictedObjectCollectionController = new PredictedObjectCollectionController()
|
this.predictedObjectCollectionController = new PredictedObjectCollectionController()
|
||||||
this.videoController = new VideoController({ width: 640, height: 480 })
|
this.videoController = new VideoController({ width: 640, height: 480 })
|
||||||
|
this.objectLocator = new ObjectLocator(this.videoController.model)
|
||||||
this.predictImage()
|
this.predictImage()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,6 +33,11 @@ class App {
|
|||||||
|
|
||||||
const predictedObjects = await this.objectDetector.predictImageStream(imageData)
|
const predictedObjects = await this.objectDetector.predictImageStream(imageData)
|
||||||
this.predictedObjectCollectionController.predictedObjects = predictedObjects
|
this.predictedObjectCollectionController.predictedObjects = predictedObjects
|
||||||
|
const offsets = predictedObjects.map(obj => {
|
||||||
|
return this.objectLocator.detectPredictedObjectLocationFromVideo(obj)
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(offsets)
|
||||||
|
|
||||||
window.requestAnimationFrame(this.predictImage)
|
window.requestAnimationFrame(this.predictImage)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user