📁 refact: Computer Vison to isolated directory
This commit is contained in:
parent
4b0fef89e9
commit
7d4346090a
@ -1,32 +0,0 @@
|
|||||||
import PredictedObject from "../Models/PredictedObject"
|
|
||||||
import PredictedObjectCollection from "../Models/PredictedObjectCollection"
|
|
||||||
import PredictedObjectView from "../Views/PredictedObjectView"
|
|
||||||
|
|
||||||
class PredictedObjectCollectionController {
|
|
||||||
private model: PredictedObjectCollection
|
|
||||||
|
|
||||||
constructor () {
|
|
||||||
this.model = new PredictedObjectCollection()
|
|
||||||
this.renderView()
|
|
||||||
}
|
|
||||||
|
|
||||||
set predictedObjects (objects: PredictedObject[]) {
|
|
||||||
this.model.objects = objects
|
|
||||||
this.renderView()
|
|
||||||
}
|
|
||||||
|
|
||||||
public renderView = () => {
|
|
||||||
const existingPredictedObjectViews = document.querySelectorAll('.PredictedObject')
|
|
||||||
existingPredictedObjectViews.forEach(v => {
|
|
||||||
v.outerHTML = ''
|
|
||||||
})
|
|
||||||
|
|
||||||
const body = document.querySelector('body')!
|
|
||||||
this.model.objects.forEach((object: PredictedObject) => {
|
|
||||||
const predictedObjectView = new PredictedObjectView(object)
|
|
||||||
body.appendChild(predictedObjectView.element)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default PredictedObjectCollectionController
|
|
@ -1,48 +0,0 @@
|
|||||||
import Video from "../Models/Video"
|
|
||||||
import VideoView from '../Views/VideoView'
|
|
||||||
|
|
||||||
class VideoController {
|
|
||||||
private defaultWidth: number = 640
|
|
||||||
private defaultHeight: number = 480
|
|
||||||
private userMediaConstraints = { video: true }
|
|
||||||
public model: Video
|
|
||||||
private view: VideoView
|
|
||||||
|
|
||||||
constructor (props: { width?: number, height?: number } = {}) {
|
|
||||||
this.model = new Video({
|
|
||||||
width: props.width || this.defaultWidth,
|
|
||||||
height: props.height || this.defaultHeight
|
|
||||||
})
|
|
||||||
|
|
||||||
this.view = new VideoView(this.model)
|
|
||||||
this.renderView()
|
|
||||||
this.enableCamera()
|
|
||||||
}
|
|
||||||
|
|
||||||
get imageData () {
|
|
||||||
if (!this.view.element.srcObject) return null
|
|
||||||
|
|
||||||
const canvas: HTMLCanvasElement = document.createElement('canvas')
|
|
||||||
canvas.width = this.model.width
|
|
||||||
canvas.height = this.model.height
|
|
||||||
const context = canvas.getContext('2d')!
|
|
||||||
context.drawImage(this.view.element, 0, 0, this.model.width, this.model.height)
|
|
||||||
|
|
||||||
return context.getImageData(0, 0, this.model.width, this.model.height)
|
|
||||||
}
|
|
||||||
|
|
||||||
private enableCamera = async () => {
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia(this.userMediaConstraints)
|
|
||||||
this.view.srcObject = stream
|
|
||||||
}
|
|
||||||
|
|
||||||
private renderView () {
|
|
||||||
const existingVideoView = document.querySelector('#videoView')
|
|
||||||
if (existingVideoView) existingVideoView.outerHTML = ''
|
|
||||||
|
|
||||||
const body = document.querySelector('body')!
|
|
||||||
body.appendChild(this.view.element)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default VideoController
|
|
@ -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 === 'cat',
|
(prediction: DetectedObject) => prediction.class === 'person',
|
||||||
]
|
]
|
||||||
|
|
||||||
function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector {
|
function makeObjectDetector (filterPredicates?: Function[]): ObjectDetector {
|
@ -1,10 +1,10 @@
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
entry: './src/app.ts',
|
entry: './src/Vision/app.ts',
|
||||||
devtool: 'inline-source-map',
|
devtool: 'inline-source-map',
|
||||||
devServer: {
|
devServer: {
|
||||||
contentBase: './dist',
|
contentBase: './dist/Vision',
|
||||||
hot: true,
|
hot: true,
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
@ -21,6 +21,6 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
filename: 'app.js',
|
filename: 'app.js',
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist', 'Vision'),
|
||||||
},
|
},
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user