feat: added rotation config

This commit is contained in:
2021-01-13 21:19:03 +01:00
parent 9419544511
commit 7d46950add
4 changed files with 28 additions and 3 deletions

2
.gitignore vendored
View File

@@ -222,3 +222,5 @@ yarn-error.log
# custom # custom
.idea/ .idea/
sounds/ sounds/
config.ini

View File

@@ -6,9 +6,9 @@ import router from './router';
Vue.use(new VueSocketIO({ Vue.use(new VueSocketIO({
debug: false, debug: false,
connection: SocketIO(`${window.location.protocol}//${window.location.host}`), connection: SocketIO(`${window.location.protocol}//${window.location.host}`, { transports: ['websocket'] }),
options: { options: {
transport: 'websocket', transports: ['websocket'],
}, },
})); }));

2
config.example.ini Normal file
View File

@@ -0,0 +1,2 @@
[camera]
rotate=0

View File

@@ -1,6 +1,7 @@
from io import BytesIO from io import BytesIO
import os.path import os.path
from typing import Optional from typing import Optional
import configparser
import cv2 import cv2
from PIL import Image from PIL import Image
@@ -13,16 +14,36 @@ FACE_DATA = next(filter(os.path.exists, [
face_cascade = cv2.CascadeClassifier(FACE_DATA) face_cascade = cv2.CascadeClassifier(FACE_DATA)
def get_rotate_value(input_value):
if input_value == '0':
return None
if input_value == '90':
return cv2.ROTATE_90_CLOCKWISE
if input_value == '-90' or input_value == '270':
return cv2.ROTATE_90_COUNTERCLOCKWISE
if input_value == '180':
return cv2.ROTATE_180
raise ValueError(f"Unsupported rotation value {input_value!r}")
class Camera: class Camera:
capture: cv2.VideoCapture capture: cv2.VideoCapture
def __init__(self): def __init__(self):
self.capture = cv2.VideoCapture(0) self.capture = cv2.VideoCapture(0)
parser = configparser.ConfigParser()
parser.read('config.ini')
self.config = parser['camera']
self.rotate = get_rotate_value(self.config['rotate'])
def get_image(self) -> Optional[bytes]: def get_image(self) -> Optional[bytes]:
return_code, image = self.capture.read() return_code, image = self.capture.read()
if not return_code: if not return_code:
return None return None
if self.rotate is not None:
image = cv2.rotate(image, self.rotate)
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(image_gray, 1.3, 5) faces = face_cascade.detectMultiScale(image_gray, 1.3, 5)