LINT warnings fix

This commit is contained in:
Fabio Manganiello 2019-09-26 19:23:38 +02:00
parent 168b1b0e5a
commit a17dba3ec6
2 changed files with 27 additions and 20 deletions

View File

@ -1,7 +1,6 @@
import base64
import os
import tempfile
import time
from flask import Response, request, Blueprint, send_from_directory
@ -22,7 +21,7 @@ def get_feed(**args):
frame = send_request(action='camera.ir.mlx90640.capture', **args).output[0]
frame = base64.decodebytes(frame.encode())
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
finally:
send_request(action='camera.ir.mlx90640.stop')
@ -56,5 +55,4 @@ def get_feed_route():
return Response(get_feed(**args),
mimetype='multipart/x-mixed-replace; boundary=frame')
# vim:sw=4:ts=4:et:

View File

@ -1,11 +1,11 @@
import base64
import io
import math
import os
import subprocess
import time
from PIL import Image, ImageCms
# noinspection PyPackageRequirements
from PIL import Image
from platypush.plugins import Plugin, action
@ -46,7 +46,8 @@ class CameraIrMlx90640Plugin(Plugin):
"""
:param fps: Frames per seconds (default: 16)
:param skip_frames: Number of frames to be skipped on sensor initialization/warmup (default: 2)
:param scale_factor: The camera outputs 24x32 pixels artifacts. Use scale_factor to scale them up to a larger image (default: 1)
:param scale_factor: The camera outputs 24x32 pixels artifacts. Use scale_factor to scale them up to a larger
image (default: 1)
:param rotate: Rotation angle in degrees (default: 0)
:param rawrgb_path: Specify it if the rawrgb executable compiled from
https://github.com/pimoroni/mlx90640-library is in another folder than
@ -70,27 +71,34 @@ class CameraIrMlx90640Plugin(Plugin):
self._capture_proc = None
def _is_capture_proc_running(self):
return self._capture_proc != None and self._capture_proc.poll() == None
return self._capture_proc is not None and self._capture_proc.poll() is None
def _get_capture_proc(self, fps):
if not self._is_capture_proc_running():
self._capture_proc = subprocess.Popen([self.rawrgb_path, '{}'.format(self.fps)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
fps = fps or self.fps
self._capture_proc = subprocess.Popen([self.rawrgb_path, '{}'.format(fps)], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return self._capture_proc
# noinspection PyShadowingBuiltins
@action
def capture(self, output_file=None, frames=1, grayscale=False, fps=None, skip_frames=None, scale_factor=None, rotate=None, format='jpeg'):
def capture(self, output_file=None, frames=1, grayscale=False, fps=None, skip_frames=None, scale_factor=None,
rotate=None, format='jpeg'):
"""
Capture one or multiple frames and return them as raw RGB
:param output_file: Can be either the path to a single image file or a format string (e.g. 'snapshots/image-{:04d}') in case of multiple frames.
If not set the function will return a list of base64 encoded representations of the raw RGB frames, otherwise the list of captured files.
:param output_file: Can be either the path to a single image file or a format string
(e.g. 'snapshots/image-{:04d}') in case of multiple frames. If not set the function will return a list of
base64 encoded representations of the raw RGB frames, otherwise the list of captured files.
:type output_file: str
:param frames: Number of frames to be captured (default: 1). If None the capture process will proceed until `stop` is called.
:param frames: Number of frames to be captured (default: 1). If None the capture process will proceed until
`stop` is called.
:type frames: int
:param grayscale: Save the image as grayscale - black pixels will be colder, white pixels warmer (default: False)
:param grayscale: Save the image as grayscale - black pixels will be colder, white pixels warmer
(default: False)
:type grayscale: bool
:param fps: If set it overrides the fps parameter specified on the object (default: None)
@ -109,8 +117,8 @@ class CameraIrMlx90640Plugin(Plugin):
It can be jpg, png, gif or any format supported by PIL
:type format: str
:returns: list[str]. Each item is a base64 encoded representation of a frame in the specified format if output_file is not set, otherwise a list with
the captured image files will be returned.
:returns: list[str]. Each item is a base64 encoded representation of a frame in the specified format if
output_file is not set, otherwise a list with the captured image files will be returned.
"""
fps = self.fps if fps is None else fps
@ -125,7 +133,8 @@ class CameraIrMlx90640Plugin(Plugin):
files = set()
camera = self._get_capture_proc(fps)
while (frames is not None and n_captured_frames < frames) or (frames is None and self._is_capture_proc_running()):
while (frames is not None and n_captured_frames < frames) or (
frames is None and self._is_capture_proc_running()):
frame = camera.stdout.read(size[0] * size[1] * 3)
if skip_frames > 0:
@ -138,7 +147,7 @@ class CameraIrMlx90640Plugin(Plugin):
if grayscale:
image = self._convert_to_grayscale(image)
if scale_factor != 1:
size = tuple(i*scale_factor for i in size)
size = tuple(i * scale_factor for i in size)
image = image.resize(size, Image.ANTIALIAS)
if rotate:
image = image.transpose(rotate)
@ -159,13 +168,14 @@ class CameraIrMlx90640Plugin(Plugin):
self.stop()
return sorted([f for f in files]) if output_file else captured_frames
def _convert_to_grayscale(self, image):
@staticmethod
def _convert_to_grayscale(image):
new_image = Image.new('L', image.size)
for i in range(0, image.size[0]):
for j in range(0, image.size[1]):
r, g, b = image.getpixel((i, j))
value = int(2.0*r - 0.5*g - 1.5*b)
value = int(2.0 * r - 0.5 * g - 1.5 * b)
if value > 255:
value = 255
@ -189,5 +199,4 @@ class CameraIrMlx90640Plugin(Plugin):
self._capture_proc.wait()
self._capture_proc = None
# vim:sw=4:ts=4:et: