feat: send offsets to server

This commit is contained in:
ysandler 2021-01-22 19:09:01 -06:00 committed by Joshua Shoemaker
parent 2bb8ac647c
commit be6efeddcf
9 changed files with 133 additions and 6451 deletions

4
dist/Vision/main.js vendored

File diff suppressed because one or more lines are too long

6527
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,11 +13,13 @@
"@tensorflow-models/coco-ssd": "^2.2.1", "@tensorflow-models/coco-ssd": "^2.2.1",
"@tensorflow/tfjs": "^2.8.2", "@tensorflow/tfjs": "^2.8.2",
"express": "^4.17.1", "express": "^4.17.1",
"socket.io": "^3.1.0" "socket.io": "^3.1.0",
"socket.io-client": "^3.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.11", "@types/express": "^4.17.11",
"@types/socket.io": "^2.1.12", "@types/socket.io": "^2.1.12",
"@types/socket.io-client": "^1.4.35",
"ts-loader": "^8.0.13", "ts-loader": "^8.0.13",
"typescript": "^4.1.3", "typescript": "^4.1.3",
"webpack": "^5.11.1", "webpack": "^5.11.1",

View File

@ -50,16 +50,17 @@ class Server {
} }
openSockets = (socketService: any) => { openSockets = (socketService: any) => {
socketService.on('connection', () => { socketService.on('connection', (socket: Socket) => {
console.log('client connected') console.log('client connected')
socket.on('offsets', (offsets: any) => {
this.onReceiveOffsets(offsets)
})
}) })
socketService.on('message', (message: any) => {
console.log(message)
})
} }
public onReceiveOffsets = (offsets: any[]) => { onReceiveOffsets = (offsets: any[]) => {
this.eventManager.emit('onReceiveOffsets', offsets) this.eventManager.emit('onReceiveOffsets', offsets)
} }

View File

@ -0,0 +1,7 @@
import IOffset from "./IOffset";
interface IRoboticsCommunicator {
sendOffsets(offsets: IOffset[]): void
}
export default IRoboticsCommunicator

View File

@ -3,7 +3,7 @@ import ObjectDetector from "../ObjectDetector"
const defaultPredictions = [ const defaultPredictions = [
(prediction: DetectedObject) => prediction.score > 0.6, (prediction: DetectedObject) => prediction.score > 0.6,
(prediction: DetectedObject) => prediction.class === 'person', (prediction: DetectedObject) => prediction.class === 'cat',
] ]
function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector { function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector {

View File

@ -0,0 +1,8 @@
import RoboticsCommunicator from "../RoboticsCommunicator"
function makeRoboticsCommunicator () {
return new RoboticsCommunicator()
}
export default makeRoboticsCommunicator

View File

@ -0,0 +1,16 @@
import * as io from 'socket.io-client'
import IOffset from '../Interfaces/IOffset'
class RoboticsCommunicator {
socket: SocketIOClient.Socket
constructor () {
this.socket = io.connect()
}
sendOffsets = (offsets: IOffset[]) => {
this.socket.emit('offsets', offsets)
}
}
export default RoboticsCommunicator

View File

@ -1,6 +1,7 @@
import IObjectDetector from './Interfaces/IObjectDetector' import IObjectDetector from './Interfaces/IObjectDetector'
import IObjectLocator from './Interfaces/IObjectLocator' import IObjectLocator from './Interfaces/IObjectLocator'
import IOffset from './Interfaces/IOffset' import IOffset from './Interfaces/IOffset'
import IRoboticsCommunicator from './Interfaces/IRoboticsCommunicator'
import IUiRenderer from './Interfaces/IUiRenderer' import IUiRenderer from './Interfaces/IUiRenderer'
import IVideoCapturer from "./Interfaces/IVideoCapturer" import IVideoCapturer from "./Interfaces/IVideoCapturer"
@ -8,17 +9,20 @@ import makeObjectDetector from './UseCases/Factories/makeObjectDetector'
import makeObjectLocator from './UseCases/Factories/makeObjectLocator' import makeObjectLocator from './UseCases/Factories/makeObjectLocator'
import makeUiRenderer from './UseCases/Factories/makeUiRenderer' import makeUiRenderer from './UseCases/Factories/makeUiRenderer'
import makeVideoCapturer from './UseCases/Factories/makeVideoCatpurer' import makeVideoCapturer from './UseCases/Factories/makeVideoCatpurer'
import makeRoboticsCommunicator from './UseCases/Factories/mkaeRoboticsCommunicator'
class App { class App {
private objectDetector: IObjectDetector private objectDetector: IObjectDetector
private objectLocator: IObjectLocator private objectLocator: IObjectLocator
private videoCapturer: IVideoCapturer private videoCapturer: IVideoCapturer
private roboticsCommunicator: IRoboticsCommunicator
private uiRenderer: IUiRenderer private uiRenderer: IUiRenderer
constructor () { constructor () {
this.videoCapturer = makeVideoCapturer() this.videoCapturer = makeVideoCapturer()
this.objectDetector = makeObjectDetector() this.objectDetector = makeObjectDetector()
this.objectLocator = makeObjectLocator() this.objectLocator = makeObjectLocator()
this.roboticsCommunicator = makeRoboticsCommunicator()
this.uiRenderer = makeUiRenderer() this.uiRenderer = makeUiRenderer()
const eventTarget = new EventTarget() const eventTarget = new EventTarget()
@ -36,6 +40,7 @@ class App {
const predictedObjects = await this.objectDetector.getPredictionsFromImageData(imageData) const predictedObjects = await this.objectDetector.getPredictionsFromImageData(imageData)
const offsets: IOffset[] = predictedObjects.map(obj => this.objectLocator.getOffsetsFromPredictions(obj)) const offsets: IOffset[] = predictedObjects.map(obj => this.objectLocator.getOffsetsFromPredictions(obj))
this.roboticsCommunicator.sendOffsets(offsets)
this.uiRenderer.render({ imageData, predictedObjects, offsets }) this.uiRenderer.render({ imageData, predictedObjects, offsets })
window.requestAnimationFrame(this.predictImage) window.requestAnimationFrame(this.predictImage)