Водная информация:
1 2 3 4 5 |
Последовательный интерфейс CSI - Camera Serial Interface apt-get install luvcview - установим приложение для проверки камеры (работает в GUI) luvcview - при запуске вы увидите видео с первого видео источника /dev/video0 luvcview -s 320x240 - уменьшаем выводимое изображение до 320x240 (640x480 стандартное) dmesg - используй для диагностики неисправности |
Работа с камерой в python используя SimpleCV:
1 2 3 4 5 |
apt-get install python-opencv python-scipy python-numppy python-pip - установка пакетов для установки SimpleCV pip install https://github.com/ingenuitas/SimpleCV/zipball/master - установка SimpleCV python - входим в интерпретатор >>>> import SimpleCV - проверяем подключение библиотеки SympleCV Ctrl+c - завершить скрипт |
Отображение картинки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cd ~ - перешли в домашнею директорию mkdir simplecv-test - создали директорию В папку simplecv-test сохраните какую нибудь картинку c именем raspberries.jpg nano image-dysplay.py - создадим пустой файл с именем image-display.py ----------------------- from SimpleCV import Image, Display - импортируем нужные библиотеки from time import sleep - импортируем нужные библиотеки myDisplay - Display() - создаем новый объект-окно raspberryImage = Image("raspberries.jpg") - загружаем изображение из файла raspberryImage.save(myDisplay) - показываем картинку while not myDisplay.isDone() - предотвращаем немедленное завершение скрипта после вывода картинки sleep(0.1) ----------------------- |
Изменяем изображение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
nano superimpose.py ----------------------- from SimpleCV import Image, Display, DrawingLayer, Color - импортируем нужные библиотеки (слой рисования и работы с цветом) from time import sleep - импортируем нужные библиотеки myDisplay - Display() - создаем новый объект-окно raspberryImage = Image("raspberries.jpg") - загружаем изображение из файла myDrawingLayer = DrawingLayer((raspberryImage.width, raspberryImage.height)) - создаем слой рисования как у изображения myDrawingLayer.rectangle((50,26), (250, 60), filed=True) - на этом слое рисуем прямоугольник myDrawingLayer.setFontSize(45) - задаем размер шрифта для текста myDrawingLayer.text("Raspberryes!", (50,20), color=Color.WHITE) - пишем текст raspberryImage.addDriwingLayer(myDrawingLayer) - добавляем myDarwingLayer в raspberryImage raspberryImage.applyLayers() - объединяем добавленные слои raspberryImage.save(myDisplay) - показываем картинку while not myDisplay.isDone() - предотвращаем немедленное завершение скрипта после вывода картинки sleep(0.1) raspberryImage.save("raspberry_new_name_file.jpg") - сохранить изменения изображения в другой файл ----------------------- |
Доступ к камере:
1 2 3 4 5 6 7 8 9 10 11 |
nano basic-camera.py ------------------------ from SimpleCV import Camera, Display - импортируем нужные библиотеки ( камера и окно) from time import sleep - импортируем нужные библиотеки myCamera = Camera(prop_set={'width':320, 'height':240}) - создаем новый объект камеру с разрешением 320 х 240 пикселей myDisplay = Display(resolution=(320, 240)) - устанавливаем размер окна while not myDisplay.isDone(): - цикл будет выполнятся пока окно не закроется myCamera.getImage().save(myDisplay) - получаем кадр с камеры и показываем на экране sleep(.1) - ждем десятую долю секунды ------------------------- |
Распознавание лиц:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
cd ~ mkdir simplecvtest touch face-detector.py nano face-detector.py ------------------------- from SimpleCV import Camera, Display - импортируем нужные библиотеки from time import sleep - импортируем нужные библиотеки myCamera = Camera(prop_set={'width':320, 'height':240}) - создаем новый объект камеру с разрешением 320 х 240 пикселей myDisplay = Display(resolution=(320, 240)) - устанавливаем размер окна while not myDisplay.isDone(): frame = myCamera.getImage() faces = frame.findHaarFeatures('face') - ищем лица на фотографии и сохраняем их в объект face if face in faces: - если findHaarFeatures нашла хоть одно лицо, выполняем нужный код print "Face at: " + striface.coordinates()) else: print "No faces detected." frame.save(myDisplay) sleep(.1) ------------------------- |
Фото будка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Нам нужно: USB-камера; монитор; кнопка; провод; резистор на 10кОм. nano phototbooth.py ------------------------- from time import sleep, time from SimpleCV import Camera, Image, Display import RPi.GPIO as GPIO myCamera = Camera(prop_set={'width':320, 'height': 240}) myDisplay = Display(resolution=(320, 240)) stache = Image("mustache.png") stacheMask = stache.createBinaryMask( - Создаем маску из усов (все кроме черного цвета будет прозрачным) color=(0,0,0), color2=(254,254,254)) stacheMask = stacheMask.invert() - инвертируем маску так чтобы были видны черные символы GPIO.setmode (GPIO.BCM) GPIO.setup(24, GPIO.IN) def mustachify(frame): - эта функция принимает на вход кадр и возвращает кадр с подставленными усами (если были найдены) faces = frame.findHaarFeatures('face') if faces: for face in faces: print "Face at: " + str(face.coordinates()) myFace = face.crop() - создаем отдельное изображение лица для ускорения поиска носа noses = myFace.findHaarFeatures('nose') if noses: nose = noses.sortArea()[-1] - если на лице найдено несколько носов, выбираем тот, что больше. print "Nose at: " + str(nose.coordinates()) xmust = (face.points[0][0] + nose.x - - устанавливаем X-координату усов (stache.width / 2)) ymust = (face.points[0][1] + nose.y + - устанавливаем Y-координату усов (stache.height / 3)) else: return frame - если нос не найден просто возвращаем кадр frame = frame.blit( stache, pos=(xmust, ymust), mask=stacheMask) - используем функцию blit (сокращаем от BLock Image Transfer) для наложения усов на кадр return frame - возвращаем усатый кадр else: return frame - если лицо не найдено, просто возвращаем кадр while not myDisplay.isDone(): inputValue = GPIO.input(24) frame = myCamera.getImage() if inputValue == True: frame = mustachify(frame) - передаем кадр в функцию mustachify frame.save("mustache-" + str(time()) + ".jpg") - сохраняем кадр в jpg-файл со временем в качестве названия frame = frame.flipHorizontal() - разворачиваем кадр горизонтально, чтобы это было похоже на отражение в зеркале frame.show() sleep(3) - оставляем сохраненную фотографию на экране на три секунды else: frame = frame.flipHorizontal() - если кнопка не нажата, начинаем транслировать картинку с камеры frame.save(myDisplay) sleep(.05) ------------------------- |
Дополнительные ссылки:
1 2 3 4 5 |
https://github.com/ccrisan/motioneyeos/releases http://www.spy-soft.net/videonablyudenie-linux-motion/ http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuideInstallation https://it4it.club/topic/48-videonablyudenie-na-osnove-paketa-motion/ https://webhamster.ru/mytetrashare/index/mtb0/1455102191tr0ca7cbhm |
motion + motioneye:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
apt-get update apt-get upgrade cd /opt wget https://github.com/ccrisan/motioneye/wiki/precompiled/ffmpeg_2.8.3.git325b593-1_armhf.deb dpkg -i ffmpeg_2.8.3.git325b593-1_armhf.deb apt-get remove libavcodec-extra-56 libavformat56 libavresample2 libavutil54 apt-get install libavutil54 libavformat56 libswscale3 apt-get install motion wget https://github.com/ccrisan/motioneye/wiki/precompiled/motion-mrdave-raspbian -O usr/local/bin/motion chmod +x /usr/local/bin/motion apt-get install python-pip python-dev curl libssl-dev libcurl4-openssl-dev libjpeg-dev pip install motioneye mkdir -p /etc/motioneye cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf mkdir -p /var/lib/motioneye cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service systemctl daemon-reload systemctl enable motioneye systemctl start motioneye pip install motioneye --upgrade reboot Для включения поддержки родной камеры pi: nano /etc/module ---------------- bcm2835_v4l2 ---------------- или modprobe bcm2835-v4l2 ---------------- Веб морда: http://DNS_NAME_OR_IP_ADDR:8765/ |
ссылки:
1 2 3 |
http://www.raspberrypi.org/camera http://www.terraelectronica.ru/ http://www.armlinux.ru/%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D0%B4%D0%BB%D1%8F-raspberry-pi/ |
Capture an image in jpeg format:
1 2 3 4 5 6 7 8 9 10 |
raspistill -o image.jpg Capture a 5s video in h264 format: raspivid -o video.h264 Capture a 10s video: raspivid -o video.h264 -t 10000 Capture a 10s video in demo mode: raspivid -o video.h264 -t 10000 -d To see a list of possible options for running raspivid or raspistill, you can run: raspivid | less raspistill | less |
передача по сети:
1 2 3 4 5 |
sudo apt-get install mplayer netcat Find your IP address by running ifconfig. (Your IP address will be listed in the console output and will probably be of the form 192.168.1.XXX). Run the following command in a terminal to view the feed using MPlayer: 0. nc -l -p 5001 | mplayer -fps 31 -cache 1024 - 1. [Path to nc.exe]\nc.exe -L -p 5001 | [Path to mplayer.exe]\mplayer.exe -fps 31 -cache 1024 - |
прием:
1 2 3 4 5 |
mkfifo buffer nc -p 5001 -l > buffer | /opt/vc/src/hello_pi/hello_video/hello_video.bin buffer To transmit the feed from the Pi with camera module attached After setting up the “receiving” machine as per the instructions above, run the following commands in a terminal on the “transmitting” Pi: raspivid -t 999999 -o - | nc [insert the IP address of the client] 5001 |