vue中实现方式
data () {
return {
state: false
},
mounted () {
video.addEventListener('loadeddata', () => {
var videoElement = document.getElementById('video')
var canvas = document.createElement("canvas")
canvas.width = videoElement.videoWidth
canvas.height = videoElement.videoHeight
this.canvas = canvas
this.videoElement = videoElement
this.drawImage(canvas, videoElement)
}, false)
},
methods: {
drawImage (canvas, videoElement) {
canvas.getContext('2d').drawImage(videoElement, 0, 0, canvas.width, canvas.height)
var img = document.createElement("img")
img.src = canvas.toDataURL("image/png")
let result = this.dataURLtoFile(img.src, 'image/jpeg')
this.getPredict(this.camera, result)
},
dataURLtoFile (dataurl, type) {
let binary = atob(dataurl.split(',')[1])
let array = [];
for(let i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i))
}
return new Blob([new Uint8Array(array)], {type:type })
},
getPredict (val, file) {
let formData = new FormData()
let fileOfBlob = new File([file], new Date()+'.jpg')
formData.append('camera', val)
formData.append('file', fileOfBlob)
this.axios.post('/model/api/v1/predict2', formData, {
headers: {
Authorization: this.token
}
}).then(res => {
console.log('res predict', res)
if (res.status === 200) {
if (res.data.status === 1 && res.data.message === 'OK') {
console.log('res.data', res.data)
if (this.state === true) {
console.log('pause')
} else {
this.timer = setTimeout(() => {
this.drawImage(this.canvas, this.videoElement)
}, 5000)
}
}
}
})
}
},
beforeDestroy(){
this.state = true
window.clearTimeout(this.timer)
}
