| 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: | |