У меня проблема. Я разрабатываю сервер для получения .jpg
от raspberry
через WebSockets. Итак, я создаю сценарий для получения и отправки данных с OpenCV
и Socket.io
. Код показан ниже:
import cv2
import socketio
import time
camera = cv2.VideoCapture(0) # init the camera
# change the resolution of camera
socket = socketio.Client()
socket.connect('http://127.0.0.1:3000')
HEIGHT = 640
WIDTH = 480
FPS = 20
while True:
try:
_, frame = camera.read() # grab the current frame
frame = cv2.resize(frame, (HEIGHT, WIDTH))
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
_, binary = cv2.imencode('.jpg', frame,[cv2.IMWRITE_JPEG_QUALITY,20])
socket.emit('send-frame', binary.tobytes())
time.sleep(1/FPS)
except KeyboardInterrupt:
break
socket.disconnect()
camera.release()
На сервере, который я использовал:
const express = require('express')
const path = require('path')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const PORT = 3000
app.use(express.static(path.join(__dirname, './public')))
let sendVideo = false
const listCameras = []
const query = camera => camera === data
io.on("connection", socket => {
// socket.on('available-cameras', data => {
// console.log(data)
// const existingCameras = listCameras.find(query)
// if(!existingCameras)
// listCameras.push(data.place)
// })
socket.on('get-video', enableVideo => {
sendVideo = enableVideo
})
socket.on("send-frame", data => {
if(sendVideo === true){
socket.broadcast.compress(true).emit('frame', data)
}
})
})
server.listen(PORT,'127.0.0.1', () => {
console.log('Listening on', PORT)
})
Чтобы повысить производительность, я увидел, что модуль кластера может разделить обязанности между доступными ядрами на P C. Итак, я разрабатываю код:
const cluster = require('cluster')
const numCPUs = require('os').cpus().length
if(cluster.isMaster){
for (let i=0; i < numCPUs; i++){
cluster.fork()
}
cluster.on('exit', (worker, code, signal) => {
console.log('worker ' + worker.process.pid + ' died')
})
} else {
require("./server.js")
}
Но после этого я запускаю кластер. js, и я не получаю изображения на своей веб-странице. Как я могу решить эту проблему ? Заранее спасибо.
Пока не забыл, индекс. js код:
const socket = io.connect("localhost:3000")
// Receving the frames
socket.on("frame", data => {
console.log('data')
let base64String = btoa(String.fromCharCode(...new Uint8Array(data)))
camera.src = `data:image/png;base64,${base64String}`
})