-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcam.py
119 lines (82 loc) · 3.26 KB
/
cam.py
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import RPi.GPIO as GPIO
from picamera import PiCamera
import time
import os
import logging
#from brightpi import *
from subprocess import call
class WildCam:
def __init__(self):
self.pin = 24
self.ir_light_1 = 25
self.ir_light_2 = 8
#self.brightPi = BrightPi()
self.lens = PiCamera()
self.lens.rotation = 180
self.lens.resolution=(1024,720)
GPIO.setup(self.pin,GPIO.OUT)
GPIO.setup(self.ir_light_1,GPIO.OUT)
GPIO.setup(self.ir_light_2,GPIO.OUT)
self.is_recording = False
def close(self):
self.lens.close()
def test(self,name_generator):
logging.info('Test camera setup')
photo_day = self.shot(nr_of_shots=1,pause=4,night_mode=False,name_generator=name_generator)
video_day = self.record(4,night_mode=False,name_generator=name_generator)
photo_night = self.shot(nr_of_shots=1,pause=4,night_mode=True,name_generator=name_generator)
video_night = self.record(4,night_mode=True,name_generator=name_generator)
photos = photo_day + photo_night
videos = video_day + video_night
return photos,videos
def vision_settings(self,is_night):
if self.is_recording:
GPIO.output(self.ir_light_1,GPIO.LOW)
GPIO.output(self.ir_light_2,GPIO.LOW)
#self.brightPi.set_led_on_off(LED_IR, OFF)
#self.brightPi.reset()
self.is_recording = False
else:
self.is_recording = True
if is_night:
GPIO.output(self.pin,GPIO.LOW)
GPIO.output(self.ir_light_1,GPIO.HIGH)
GPIO.output(self.ir_light_2,GPIO.HIGH)
#self.brightPi.set_led_on_off(LED_IR, ON)
#self.brightPi.set_gain(15)
# needed during night for camera to adjust
time.sleep(1.8)
else:
GPIO.output(self.pin,GPIO.HIGH)
def preview(self,duration, night_mode=False):
self.vision_settings(night_mode)
self.lens.start_preview()
time.sleep(duration)
self.lens.stop_preview()
self.vision_settings(night_mode)
def record(self,duration, night_mode=False,name_generator=None):
record = []
self.vision_settings(night_mode)
record_name = name_generator('h264','v')
record_mp4 = name_generator('mp4','v')
self.lens.start_recording(record_name)
time.sleep(duration)
self.lens.stop_recording()
self.vision_settings(night_mode)
# Convert the h264 format to the mp4 format.
command = "MP4Box -add " + record_name + " " + record_mp4
call([command], shell=True)
logging.info("MP4Box => Video Converted!")
record.append(record_mp4)
return record
def shot(self,nr_of_shots=1,pause=5,night_mode=False,name_generator=None):
self.vision_settings(night_mode)
shots_taken = []
for idx in range(1,nr_of_shots+1):
record_name = name_generator('jpg','p')
self.lens.capture(record_name)
logging.info(f'Shot {idx} taken')
time.sleep(pause/10.0)
shots_taken.append(record_name)
self.vision_settings(night_mode)
return shots_taken