Ik gebruik het nogal eens om stukken code in het open source CAS SAGE te 'compileren', ik vind het ook fantastisch om de voordelen van 'high-level' Python gecombineerd te zien met uitvoeringssnelheden in dezelfde orde als C!quote:Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
Een taal die ook het gemak van python probeert te combineren met de snelheid van c is go. Het is een vrij nieuwe taal, maar het heeft wel potentie om groot te worden aangezien google er achter zit.quote:Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
| 1 | stdscr.refresh() |
Heb je hier misschien wat aan?quote:Op zaterdag 19 april 2014 01:46 schreef Chandler het volgende:
Algemeen vraagje; ik ben bezig Python om video's en foto's te kunnen schieten met de raspberry pi en de pi camera. Echter ben ik opzoek naar een nette / snelle methode om te kijken of 2 afbeeldingen op elkaar lijken. Nu heb ik al verschillende snippets gevonden maar veel wijzer wordt ik daar niet van.
Weet iemand een snelle simpele manier om via python (zonder een system call) 2 afbeeldingen te vergelijken (eventueel te verkleinen, zwart-wit te maken)?
Thanks!
Op zich wel, heb er nu al een tijdje door de docs heen zitten scrollen maar zie niet echt een mogelijkheid om 'compare' zonder commandline te doen, het vergelijken van 2 beelden. Heb je een voorbeeld gezien?quote:Op zondag 20 april 2014 16:20 schreef robin007bond het volgende:
[..]
Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | try: motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264' while True: camera.wait_recording(1) # if motion is detected, record for xx time and the video every xx seconds if detect_motion(): # Once we've detected motion, keep recording for xx seconds # and only then dump the stream to disk camera.wait_recording(motionVideoTime) write_video(stream, motionFilename) # else: # break; finally: # no motion detected anymore? stop recording camera.stop_recording() # remove first frame, so we need to run multiple runs for new 'screens' prior_image = None |
Wat is het nut van een try zonder catch?quote:Op maandag 21 april 2014 17:19 schreef Chandler het volgende:
Even een andere vraag, waarom kom ik nooit uit op finally? ik dacht dat een else met break werkte niet.. hoe kan ik zorgen dat ik bij een false op motion detect de finally bereik?
[ code verwijderd ]
| 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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | #python example import io import time import math # for microtime import datetime # for date import os # for system calls import datetime from PIL import Image import ImageChops import operator import picamera # functions def avg(values): if type(values) == type(1): return values return sum(values)//len(values) def hamming_distance(a_list, b_list): return sum(item1 != item2 for item1, item2 in zip(a_list, b_list)) def num_pairs(num_items): num_pairs = 0 while num_items > 0: num_items -= 1 num_pairs += num_items return num_pairs def compare(image1, image2): image1 = image1.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image1.getdata())) # del image1 pixel_avg = avg(grayscale_pixels) first = [(pixel > pixel_avg) for pixel in grayscale_pixels] image2 = image2.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image2.getdata())) # del image2 pixel_avg = avg(grayscale_pixels) second = [(pixel > pixel_avg) for pixel in grayscale_pixels] return ((64 - hamming_distance(first, second)) * 100) // 64 def getFreeSpace(): # read free space from current path. st = os.statvfs(os.getcwd()) du = st.f_bavail * st.f_frsize return du def bytes2human(n): symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') prefix = {} for i, s in enumerate(symbols): prefix[s] = 1 << (i + 1) * 10 for s in reversed(symbols): if n >= prefix[s]: value = float(n) / prefix[s] return '%.1f%s' % (value, s) return "%sB" % n def detect_motion(): global camera, prior_image, current_image global motionShotWidth, motionShotHeight stream = io.BytesIO() # camera.capture(stream, format = 'jpeg', use_video_port = True) camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight)) stream.seek(0) if prior_image is None: # print ("{} - First motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) prior_image = Image.open(stream) prior_image.save('first.jpg', 'jpeg', quality=80, optimize=True, progressive=True) return 0 # false else: # print ("{} - Second motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) current_image = Image.open(stream) current_image.save('second.jpg', 'jpeg', quality=80, optimize=True, progressive=True) # we want this in percent of difference, all below 90 is for continue recording, all higher could end. procent = compare(prior_image, current_image) if procent < 80: print ("{} - Motion detected!!! {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent)) return True # image_found = 1 else: print ("{} - NO motion detected {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent)) # image_found = 0 prior_image = current_image return False # return image_found def write_video(stream, filename): # Write the entire content of the circular buffer to disk with io.open(filename, 'wb') as output: with stream.lock: for frame in stream.frames: if frame.header: stream.seek(frame.position) break while True: buf = stream.read1() if not buf: break output.write(buf) def takeTimeleapseShot(): global camera, timeLeapseWidth, timeLeapseHeight, timeLeapseDirectory global prior_image # create variable for timeLeapseshot if not os.path.exists(timeLeapseDirectory): os.makedirs(timeLeapseDirectory) directory = timeLeapseDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d') if not os.path.exists(directory): os.makedirs(directory) tlshot = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.jpg' # set resolution and take the shot! camera.resolution = (timeLeapseWidth, timeLeapseHeight) camera.capture(tlshot, 'jpeg') return def takeMovementShot(): global camera global motionVideoWidth, motionVideoHeight, motionVideoTime, motionDirectory if not os.path.exists(motionDirectory): os.makedirs(motionDirectory) # is motion detected? if detect_motion(): # display that motion is detected # print("{} -++ Motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) # set camera resolution for the motion video camera.resolution = (motionVideoWidth, motionVideoHeight) # open stream for the recording stream = picamera.PiCameraCircularIO(camera, seconds=5) # start recording the stream in format h264 camera.start_recording(stream, format = 'h264') try: directory = motionDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d') if not os.path.exists(directory): os.makedirs(directory) motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264' while (True): camera.wait_recording(1) # if motion is detected, record for xx time and the video every xx seconds if detect_motion() == True: # Once we've detected motion, keep recording for xx seconds # and only then dump the stream to disk print("{} -++ Recording for {} seconds".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), motionVideoTime)) camera.wait_recording(motionVideoTime) write_video(stream, motionFilename) else: break; finally: # no motion detected anymore? stop recording print("{} - End recording, no more motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) camera.stop_recording() # remove first frame, so we need to run multiple runs for new 'screens' prior_image = None print("{} -++ Exit function".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) # variables timeLeapseWidth = 1920 timeLeapseHeight = 1080 timeLeapseDirectory = 'timeleapseshot' motionShotWidth = 102 motionShotHeight = 77 motionVideoWidth = 1024 motionVideoHeight = 768 motionVideoTime = 5 motionDirectory = 'motion' # for image comparisson prior_image = None # for comparing images imageChops maximum_rms = 15 # for comparing images commandline imageDifference = 75; # start the picamera camera = picamera.PiCamera() # disable camera led camera.led = False # Keep 500 mb free on disk diskSpaceToReserve = 500 * 1024 * 1024 # seconds timerLoop = time.time() + (3600 * 24) # microseconds (100000 is one second) timerDelay = 0.005 # init loopCounter loopCounter = 0 currentTimer = 0 # array for timeleapse shot timerArray = {} timerArray[0] = {} timerArray[0]['each'] = 5 timerArray[0]['last'] = time.time() timerArray[0]['time'] = 0 timerArray[0]['timemin'] = 0 timerArray[0]['timemax'] = 0 timerArray[0]['counter'] = 0 timerArray[0]['execute'] = 'takeTimeleapseShot' timerArray[0]['title'] = 'Take timeleapse shot' timerArray[1] = {} timerArray[1]['each'] = 0.25 timerArray[1]['last'] = time.time() timerArray[1]['time'] = 0 timerArray[1]['timemin'] = 0 timerArray[1]['timemax'] = 0 timerArray[1]['counter'] = 0 timerArray[1]['execute'] = 'takeMovementShot' timerArray[1]['title'] = 'Take motion shot' # main script while True: timeLeft = timerLoop - time.time() loopCounter = loopCounter + 1 for (key, s) in timerArray.items(): if s['each'] > 0: if (s['last'] == 0) or (time.time() - s['last'] > s['each']): print ("{} - Function {} starting".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), s['execute'])) c = s['counter'] + 1 currentTimer = time.time() # start function locals()[s['execute']]() endTimer = time.time() - currentTimer print ("{} - {} secs left - {} - {} (# {})".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), math.trunc(timeLeft), loopCounter, s['title'], c)) # save information about last function timerArray[key]['last'] = time.time() timerArray[key]['counter'] += 1 timerArray[key]['time'] = timerArray[key]['time'] + endTimer # save min/max time for benchmarking if (timerArray[key]['timemin'] == 0) or (timerArray[key]['timemin'] != 0 and timerArray[key]['timemin'] > endTimer): timerArray[key]['timemin'] = endTimer if (timerArray[key]['timemax'] == 0) or (timerArray[key]['timemax'] != 0 and timerArray[key]['timemax'] < endTimer): timerArray[key]['timemax'] = endTimer # sleep for timerDelay seconds (or microseconds) time.sleep(timerDelay) # break when time has reached its end. if time.time() > timerLoop: print(timerArray) break # break when free space is lower then given value if getFreeSpace() < diskSpaceToReserve: print("{} - Exiting: No more free space {} free".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), bytes2human(getFreeSpace()))) # close camera camera.close() |
Oké. Hmm. Ik ben gewend om objectgeoriënteerd te programmeren, dus het is even wennen voor mij om een lijst met functies te lezen.quote:Op dinsdag 22 april 2014 18:55 schreef Chandler het volgende:
Euh... geen idee, zo uit een snippet gehaald en aangepast zodat het werkte zoals ik het wenste
Heb je een betere opzet?
In 2 weken python geleerd en dit is met kopieren en plakken en een hoop aanpassen m'n huidige scriptje
[ code verwijderd ]
Graag hoor ik opbouwende comments!
| 1 2 3 4 5 6 7 8 | Try: #Hier gebeuren allerlei dingen blablablabla # Eventueel zouden ze mis kunnen gaan Catch: #Hier gaat de code naartoe als er iets fout gaat. #In dit blok kun je bijvoorbeeld een foutmelding laten verschijnen als het mis gaat. Finally: #Altijd als de try wordt verlaten zal dit blok uitgevoerd worden, dus zowel wanneer er een exception palatsvindt als wanneer het goed gaat. |
| 1 2 | # start recording the stream in format h264 camera.start_recording(stream, format = 'h264') |
| 1 2 3 4 5 6 | def num_pairs(num_items): num_pairs = 0 while num_items > 0: num_items -= 1 num_pairs += num_items return num_pairs |
| 1 2 | def num_pairs(num_items): return num_items * (num_items - 1) / 2 |
| 1 2 3 | def num_pairs(num_items): """Return the number of pairs that can be drawn from a list of num_items items.""" return num_items * (num_items - 1) / 2 |
While(true) is een oneindige loop die pas stopt als het programma stopt als ik mij niet vergis.quote:Op dinsdag 22 april 2014 21:11 schreef Chandler het volgende:
Thanks allebeide!
Ik heb idd nog een hoop te leren, en dit is mijn manier van lerenmaar aangezien ik PHP aardig onder de knie heb en dit er goed op lijkt gaat het me best aardig af!
Zal weer verder gaan spelen met de code, stukje voor stukje wordt het beter![]()
Oh, kunnen jullie me het volgende mogelijk vertellen/verwijzen;
- die beginnende array beginnend op regel 207, kan dat ook mooier?
- volgens mij is die try daar helemaal niet nodig, want een while voor het detecteren van de 'motion' lijkt me genoeg.
- Mijn functie van het detecteren van beweging is alles behalve 'erg goed'in goed licht werkt het vrij goed, maar wordt het ietsje donkerder dan blijft hij zelfs 'donker' opnemen.... vreemd.
- Oh en die While(True), waar haalt hij zijn true vandaan? uit de if statement?
Tenzij er een break komt dan, want die zit er ook inquote:Op dinsdag 22 april 2014 21:39 schreef robin007bond het volgende:
[..]
While(true) is een oneindige loop die pas stopt als het programma stopt als ik mij niet vergis.
Precies! Wat ook zou kunnen is een boolean daarvoor aanmaken. Vind ik persoonlijk wel netter.quote:Op dinsdag 22 april 2014 21:39 schreef Chandler het volgende:
[..]
Tenzij er een break komt dan, want die zit er ook in
| 1 2 3 4 5 | shouldLoop = True # maar dan een betere naam! while(shouldLoop): if blablablaconditie: shouldLoop = False |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # array for timeleapse shot timerArray = {} timerArray[0] = {} timerArray[0]['each'] = 5 timerArray[0]['last'] = time.time() timerArray[0]['time'] = 0 timerArray[0]['timemin'] = 0 timerArray[0]['timemax'] = 0 timerArray[0]['counter'] = 0 timerArray[0]['execute'] = 'takeTimeleapseShot' timerArray[0]['title'] = 'Take timeleapse shot' timerArray[1] = {} timerArray[1]['each'] = 0.25 timerArray[1]['last'] = time.time() timerArray[1]['time'] = 0 timerArray[1]['timemin'] = 0 timerArray[1]['timemax'] = 0 timerArray[1]['counter'] = 0 timerArray[1]['execute'] = 'takeMovementShot' timerArray[1]['title'] = 'Take motion shot' |
| 1 2 | timer_array = [{'each': 5, 'last': time.time(), 'time': 0, etc}, {'each': 0.25, 'last': time.time(), 'time': 0, etc}] |
| 1 | for (key, s) in timerArray.items(): |
| 1 | for s in timerArray: |
| 1 | locals()[s['execute']]() |
| 1 | s['execute']() |
| 1 | for s in timerArray: |
| 1 2 3 | timerArray[0]['execute'] = 'takeTimeleapseShot' ... timerArray[1]['execute'] = 'takeMovementShot' |
| 1 2 3 | timerArray[0]['execute'] = takeTimeleapseShot ... timerArray[1]['execute'] = takeMovementShot |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def compare(image1, image2): image1 = image1.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image1.getdata())) # del image1 pixel_avg = avg(grayscale_pixels) first = [(pixel > pixel_avg) for pixel in grayscale_pixels] image2 = image2.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image2.getdata())) # del image2 pixel_avg = avg(grayscale_pixels) second = [(pixel > pixel_avg) for pixel in grayscale_pixels] return ((64 - hamming_distance(first, second)) * 100) // 64 |
| 1 2 3 4 5 6 7 8 | def compare(image1, image2): image1 = image1.resize((8, 8), Image.BILINEAR) grayscale_pixels1 = map(avg, list(image1.getdata())) image2 = image2.resize((8, 8), Image.BILINEAR) grayscale_pixels2 = map(avg, list(image2.getdata())) return sum((grayscale_pixels1[i]-grayscale_pixels2[i])**2 for i in len(grayscale_pixels1)) |
Dit werkte niet met deze arrayquote:Op woensdag 23 april 2014 07:55 schreef thabit het volgende:
[ code verwijderd ]
Dat moet je veranderen in:
[ code verwijderd ]
| 1 2 | timerArray = [{'each': 5, 'last': time.time(), 'time': 0, 'timemin': 0, 'timem...}, {'each': 0.25, 'last': time.time(), 'time': 0, 'timemin': 0, 'timem...}] |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def compare(a, b) ik_doe_kekke_dingen(a); a.kekkedingen_ik_doe(); ik_doe_kekke_dingen(b); b.kekkedingen_ik_doe(); return verschil_tussen(a,b); # maar def compare(a, b); a = _meuk(a); b = _meuk(b); return verschil_tussen(a,b); def _meuk(x): ik_doe_kekke_dingen(x); x.kekkedingen_ik_doe(); return x; |
| 1 2 3 4 5 | dir = my_custom_dir . '/' . iets(); doen # maar os.path.join(my_custom_dir, iets(), dit(), dat()); |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import picamera import motiondetect camera = picamera.PiCamer(); camera.led = False; # Kijk trouwens even of dit kan: camera = picamera.PiCamer(led => False); md = motiondetect.MotionDetect( camera => camera, path => '/path/to/storage', # meerdere opties hier ); md.run(); |
Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.quote:Although such resizing can be performed using libraries like PIL or OpenCV, it is considerably more efficient to have the Pi’s GPU perform the resizing when capturing the image. This can be done with the resize parameter of the capture() methods:
Krijg je geen kramp in je pink van al die puntkomma's?quote:Op woensdag 23 april 2014 10:10 schreef slacker_nl het volgende:
Crap, ik had een stukje tekst en die is nu weg.
In het kort, ik zag het ook in je PHP code, maar je doet aan code duplicatie, bijvoorbeeld in je compare:
[ code verwijderd ]
Verder zou ik niet
[ code verwijderd ]
Dat fixed je shit ook op een ander platform (denk Windows portability).
En verder had ik zo'n type interface ingedachte:
[ code verwijderd ]
Dat is dan je script.
Voordeel is dat je motiondetect volledig kan testen in een testfile, want alle logica zit in die module/class. Een script testen is toch wat lastiger.
En mocht er een camera API zijn anders dan picamera die dezelfde interface heeft dan kan je dat plugged en playend aanpassen.
Overigens zou ik ook nog in de docs van picamera kijken, je doet een resize en de docs zeggen dit:
http://picamera.readthedo(...)uring-resized-images
[..]
Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.
https://docs.python.org/devguide/documenting.html
https://google-styleguide(...)yguide.html#Comments (staan leuke dingen in, los van hoe te documenteren).
Tevens ben ik benieuwd naar wat er gebeurd als je een pad hebt wat niet aangemaakt kan worden, ga je dood of blijf je doorgaan? Ik zie namelijk nergens een die, throw oid.
Blijft wennen. Die catch deed ik ook per ongeluk.quote:Op woensdag 23 april 2014 19:39 schreef thabit het volgende:
[..]
Krijg je geen kramp in je pink van al die puntkomma's?
Ja;quote:Op woensdag 23 april 2014 19:39 schreef thabit het volgende:
[..]
Krijg je geen kramp in je pink van al die puntkomma's?
| 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 | motion = detect_motion() if motion is not False and motion < motionPercent: print("{} -> Movement detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) # set camera resolution for the motion video camera.resolution = (motionVideoWidth, motionVideoHeight) # open stream for the recording stream = picamera.PiCameraCircularIO(camera, seconds=5) camera.start_recording(stream, format = 'h264') while (motion): camera.wait_recording(1) if motion is not False and motion < motionPercent: # Once we've detected motion, keep recording for xx seconds and only then dump the stream to disk if DEBUG: print("{} -> Recording for {} seconds".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), motionVideoTime)) camera.wait_recording(motionVideoTime) write_video(stream, motionFilename) # get new motion motion = detect_motion() + else: # set to false coz to low in percent to continue motion = False print("{} -> End recording".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))) camera.stop_recording() # remove motion frames, so we need to run multiple runs for new 'screens' prior_image = None current_image = None def write_video(stream, filename): """Write the entire content of the circular buffer to disk""" with io.open(filename, 'wb') as output: with stream.lock: for frame in stream.frames: if frame.header: stream.seek(frame.position) break while True: buf = stream.read1() if not buf: break output.write(buf) |
Klopt, op zich niet zo erg toch zolang het er maar geen 10+x in staat, maar heb het gelijk een functie gegevenquote:Op woensdag 23 april 2014 10:10 schreef slacker_nl het volgende:
Crap, ik had een stukje tekst en die is nu weg.
In het kort, ik zag het ook in je PHP code, maar je doet aan code duplicatie, bijvoorbeeld in je compare:
| 1 2 3 4 5 6 7 8 9 10 11 | def compareLoadImage(image): """Load image for comparing, resize and grayscale""" image1 = image.resize((8, 8), Image.BILINEAR) grayscale_pixels = map(avg, list(image1.getdata())) pixel_avg = avg(grayscale_pixels) return [(pixel > pixel_avg) for pixel in grayscale_pixels] def compare(image1, image2): """Return the hamming distance between to loaded, resized and getting grayscaled pixel data""" return ((64 - hamming_distance(compareLoadImage(image1), compareLoadImage(image2))) * 100) // 64 |
Ik gebruik idd no os.path.join, is duidelijkerquote:Verder zou ik niet ..
[ code verwijderd ]
Dat fixed je shit ook op een ander platform (denk Windows portability).
Doe ik reeds:quote:En verder had ik zo'n type interface ingedachte:
[ code verwijderd ]
Dat is dan je script.
Voordeel is dat je motiondetect volledig kan testen in een testfile, want alle logica zit in die module/class. Een script testen is toch wat lastiger.
En mocht er een camera API zijn anders dan picamera die dezelfde interface heeft dan kan je dat plugged en playend aanpassen. [/qoute]
Hoeft voor mij niet, denk dat ik nog wel commandline opties ga toevoegen zodat ik het scriptje kan gebruiken voor bv alleen een timeleapse of juist alleen voor video's (motion) opnemen..
[quote]
Overigens zou ik ook nog in de docs van picamera kijken, je doet een resize en de docs zeggen dit:
http://picamera.readthedo(...)uring-resized-images
| 1 | camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight)) |
Is idd handiger, ben er al druk doende meequote:Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.
https://docs.python.org/devguide/documenting.html
https://google-styleguide(...)yguide.html#Comments (staan leuke dingen in, los van hoe te documenteren).
Klopt, hoeft ook niet, ga er gewoon vanuit dat het werktquote:Tevens ben ik benieuwd naar wat er gebeurd als je een pad hebt wat niet aangemaakt kan worden, ga je dood of blijf je doorgaan? Ik zie namelijk nergens een die, throw oid.
Ga ik proberen!quote:
Veel! Ik zie het ook vaker in je PHP code, dus je hebt er een handje naarquote:Op donderdag 24 april 2014 07:46 schreef Chandler het volgende:
[..]
Klopt, op zich niet zo erg toch zolang het er maar geen 10+x in staat, maar heb het gelijk een functie gegeven
[ code verwijderd ]
Beter?
Dan kan die diskspace check er ook uit!quote:Klopt, hoeft ook niet, ga er gewoon vanuit dat het werktdit scriptje hoeft niet alles af te vangen
Valt toch wel mee?quote:Op vrijdag 25 april 2014 15:46 schreef slacker_nl het volgende:
Veel! Ik zie het ook vaker in je PHP code, dus je hebt er een handje naar
Kan, maar vind een nette exit wel een stuk leukerquote:Dan kan die diskspace check er ook uit!
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/python import serial, os ser = serial.Serial('/dev/ttyACM0', 9600, timeout=40) while True: line= ser.readline() print("iets gelezen") if 'VOL +' in line: print("volume omhoog") os.system("amixer -D pulse sset Master 1%+ > /dev/null") elif 'VOL -' in line: print("volume omlaag") os.system("amixer -D pulse sset Master 1%- > /dev/null") ser.close() |
Haha nice. Python leent zich ook super makkelijk voor dit soort dingen. Shell scripts schrijven is eigenlijk overbodig geworden naar mijn mening. Tenzij het echt een paar commando's zijn of zo.quote:Op zondag 8 februari 2015 10:56 schreef KomtTijd... het volgende:
Ik heb vorige week mijn eerste functionele python scriptje gemaakt.
[ code verwijderd ]
En nu bediend ik mijn volume met de kaku afstandbediening.
|
|
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |