Захват изображения, когда камера не закрыта

Я очень новичок в R Pi, но я знаю свой Python.

Я работаю над проектом, где у меня всегда работает камера, которая хранится в темноте. Что мне нужно сделать, так это захватить изображение, когда есть свет. (скажем, pi cam находится в темном поле, и когда кто-то открывает окно, он получает изображение о них)

До сих пор я использую код из базового начального учебника .

camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/image.jpg')
camera.stop_preview()

И он отлично работает. У меня есть подача камеры, и она принимает изображение. Я напишу об этом скрипте.

Я знаю, как заставить его работать навсегда, а также как запустить его при включении Pi. Единственное, что мне не хватает: Как узнать из корма камеры, если есть свет?

3 голоса | спросил Ákos Nikházy 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 23 Sep 2017 14:45:15 +0300 2017, 14:45:15

1 ответ


2

I: Фотоприемник

Используйте дополнительный фотоприемник, например. fototransistor , прикрепленный к выходу GPIO и обнаруживающий, когда есть свет.

Простая схема может выглядеть так ( источник ). С Vcc = 3,3 В и Vout привязаны к входному выводу GPIO Pi. Согласно источнику, резистор будет составлять 100 Ом, я думаю, он должен быть выше (Adafruit находится в диапазоне от 1 до 10 000 Ом). Основным недостатком этой схемы является ее аналоговый сигнал, который подается на цифровой вход и может быть несколько менее воспроизводимым.

 введите описание изображения здесь>> </a> </p>

<p> Улучшенная схема будет использовать Шмитт-Триггер, либо интегрированный, например. 74HC14 или такая схема (<a href= источник ):

 введите описание изображения здесь>> </a> </p>

<p> Требуется дополнительное оборудование. </p>

<p> <strong> II: Raspicam </strong> </p>

<p> Подождите, камера по существу является фотодетектором, зачем использовать другую? Просто Raspicam снимает все время с соответствующей частотой кадров. Прочтите изображение, вычислите сумму всех пикселей. Если это значение выше определенного порога, предположим, что оно «светлое» и сохранить изображение, в противном случае отказаться от него. Вам нужно будет определить этот порог для вашей конкретной настройки - темное изображение не будет равно нулю из-за горячих пикселей и шума. </p>

<p> В качестве примера, использующего numpy /scipy (только потому, что я использую все это время), можно также использовать любой другой пакет, который импортирует изображения). </p>

<pre><code>---- +: = 0 = + ----</code></pre>

<p> Улучшение этого было бы не сохранять все ненужные изображения на SD-карту. Вместо этого используйте <code>---- +: = 1 =: + ----</code>, чтобы захватить изображение в файл-подобный объект (поток io.BytesIO) или даже лучше (спасибо Дейву Джонсу) непосредственно к массиву numpy. Вычислите свой результат из этого объекта и сохраните только при необходимости. </p>

<p> Пример из <a href= здесь показывает, как это сделать и дает важные примечания к разрешению.

import numpy as np
import scipy.misc as spmisc

img = spmisc.imread(filename, flatten=True)
lumi = np.sum(img)
if lumi > threshold:
    # do something
  

Также важно отметить, что при выводе в незарегистрированные форматы камера округляет запрошенное разрешение. Горизонтальное разрешение округляется до ближайшего кратного 32 пикселя, а вертикальное разрешение округляется до ближайшего кратного 16 пикселей.

См:

ответил Ghanima 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 23 Sep 2017 16:03:02 +0300 2017, 16:03:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132