abonnement Unibet Coolblue Bitvavo
  woensdag 26 mei 2010 @ 15:40:19 #101
30719 keesjeislief
NextGenerationHippie
pi_81923674
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.
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!
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_81944963
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.
pi_81960310
Dat go heeft zo te zien wel accolades. Dus ik denk dat ik het maar bij Python en C(++) houd.
  donderdag 27 mei 2010 @ 20:35:25 #104
147503 Iblis
aequat omnis cinis
pi_81985801
Ik vind Go meer op Limbo lijken. Ik vind het in vergelijking met Python (te) kaal qua taalfeatures zoals een soort van polymorfisme of overerving.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  zaterdag 7 augustus 2010 @ 01:28:42 #105
296399 Outlined
Renaissance Man
pi_84964462
Haskell, dat is pas leuk :Y
Come on, who can, who can, can hear the bass drum.
pi_84969063
Heb laatst wat geklooid met Django, en ik moet zeggen, dat is toch best cool. Mooi clean framework waar je binnen no time een webapplicatie mee hebt opgezet.
  zaterdag 7 augustus 2010 @ 12:12:34 #107
30719 keesjeislief
NextGenerationHippie
pi_84970597
De laatste tijd doe ik alle programmeerdingetjes voor mijn werk in SAGE (een open source computer algebra system in Python), ik raak mijn versie van Mathematica nauwelijks meer aan. :). Het is ontzettend fijn om een volledige programmeertaal tot je beschikking te hebben (zoals de OO-capaciteiten) met zo'n fijne syntax, in combinatie met het feit dat het open source zijn betekent dat je zo diep in SAGE kunt graven als je zelf wilt/nodig hebt. (Vooral als je voor snelheid wilt optimaliseren is dat ideaal.)

Eigenlijk vind ik dat je als wetenschapper sowieso principieel zoveel mogelijk gesloten systemen zoals Mathematica moet vermijden.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_84980159
Sage gebruik ik tegenwoordig ook heel veel. Er zit nog wel een shitload aan bugs in, maar het voordeel van open source is dat je die zelf kunt fixen en zo je steentje aan het systeem kunt bijdragen. :).
pi_89281703
Klein schopje. Ben wat aan het rondklooien met curses. Hoe kan ik

1stdscr.refresh()

automatisch iedere x seconden z'n werk laten doen?
Eins, zwei, hoeplakai.
pi_89282325
Misschien met een Thread die telkens x seconden slaapt en daarna de zaak refresht?
pi_139035327
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. :N

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! :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139075175
quote:
14s.gif 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. :N

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! :)
Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
pi_139096034
quote:
1s.gif Op zondag 20 april 2014 16:20 schreef robin007bond het volgende:

[..]

Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
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?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139114649
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? :D

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
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139152865
quote:
0s.gif 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? :D
[ code verwijderd ]

Wat is het nut van een try zonder catch?
pi_139153579
Euh... geen idee, zo uit een snippet gehaald en aangepast zodat het werkte zoals ik het wenste :P

Heb je een betere opzet? :D

In 2 weken python geleerd en dit is met kopieren en plakken en een hoop aanpassen m'n huidige scriptje
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()

Graag hoor ik opbouwende comments! *)

[ Bericht 97% gewijzigd door Chandler op 22-04-2014 19:06:31 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139157704
quote:
0s.gif 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 :P

Heb je een betere opzet? :D

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! *)
Oké. Hmm. Ik ben gewend om objectgeoriënteerd te programmeren, dus het is even wennen voor mij om een lijst met functies te lezen.

De average-functie die je hebt gemaakt heeft Python zelf ook. https://docs.python.org/3/library/statistics.html#statistics.mean

Wel goed dat je de taal zo leert. https://docs.python.org/3/library/statistics.html#statistics.mean

Met het alleen kopiëren en plakken van dingen moet je oppassen dat je de achterliggende gedachten wel begrijpt. Een try en catch gebruik je als je er van uitgaat dat er iets fout kan gaan.

Als de code binnen de try fout gaat, dan komt je programma in de catch. Finally wordt ook uitgevoerd als er problemen zijn binnen de try.

Voorbeeldje:

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.

Alleen werkt het in Python net wat anders dan Catch. In Python heet dat Except volgens mij. Een goed voorbeeld staat hier:

https://docs.python.org/2/tutorial/errors.html

[ Bericht 3% gewijzigd door #ANONIEM op 22-04-2014 20:55:16 ]
pi_139158700
Commentaar binnen de functiebody's mag wel iets minder. Voorbeeld:
1
2
    # start recording the stream in format h264
    camera.start_recording(stream, format = 'h264')
Het stuk code is leesbaar genoeg hier en sowieso vrijwel hetzelfde als het commentaar dat erboven staat.

Wat je bijvoorbeeld wel kan doen, is elke functie van een docstring voorzien. Ben je daarmee bekend?
pi_139158937
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

Kan eenvoudiger:
1
2
def num_pairs(num_items):
    return num_items * (num_items - 1) / 2

Of met docstring:
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
pi_139159675
Thanks allebeide! :)

Ik heb idd nog een hoop te leren, en dit is mijn manier van leren ;) maar 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? :P
- 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?

[ Bericht 3% gewijzigd door Chandler op 22-04-2014 21:34:49 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139161213
quote:
0s.gif 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 leren ;) maar 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? :P
- 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?
While(true) is een oneindige loop die pas stopt als het programma stopt als ik mij niet vergis. :)

[ Bericht 0% gewijzigd door #ANONIEM op 22-04-2014 21:39:59 ]
pi_139161238
quote:
0s.gif 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. :)
Tenzij er een break komt dan, want die zit er ook in :P
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139161257
quote:
0s.gif Op dinsdag 22 april 2014 21:39 schreef Chandler het volgende:

[..]

Tenzij er een break komt dan, want die zit er ook in :P
Precies! Wat ook zou kunnen is een boolean daarvoor aanmaken. Vind ik persoonlijk wel netter.

1
2
3
4
5
shouldLoop  = True # maar dan een betere naam!

while(shouldLoop):
   if blablablaconditie:
      shouldLoop = False


[ Bericht 32% gewijzigd door #ANONIEM op 22-04-2014 21:42:33 ]
pi_139162583
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'
Je maakt hier een dictionary van dictionaries van timerArray. Waarom niet gewoon een list? Snake case is trouwens gebruikelijker in Python dan camel case (dus timer_array).
1
2
timer_array = [{'each': 5,    'last': time.time(), 'time': 0, etc},
               {'each': 0.25, 'last': time.time(), 'time': 0, etc}]
pi_139163011
1for (key, s) in timerArray.items():
Je gebruikt de waarde van de key hier alleen om de timerArray te indexeren. Het kan ook zo:
1for s in timerArray:
pi_139163528
1locals()[s['execute']]()
Dit is ook wat cryptisch. Je kunt functies gewoon gebruiken als dict values (gewoon geen aanhalingstekens gebruiken: takeTimeleapseShot ipv 'takeTimeleapseShot'). Dan kun je het eenvoudig zo doen:
1s['execute']()
pi_139171218
Top! ik ga er verder mee spelen en kom hier later allemaal op terug ;)

_O_ Thanks!

Oh en deze regel

1for s in timerArray:
Ik kan ik dan ook de data aanpassen? daarvoor gebruik ik nu de key, om de juiste data aan te passen in deze array...

-edit 1-

s['execute']() werkt niet, krijg een foutmelding, als ik het weer verander naar locals()[s['execute']]() werkt het wel :+

Tevens als ik de dictionary verander, moet ik ook de for veranderen, dus dat moet even wachten...

[ Bericht 30% gewijzigd door Chandler op 23-04-2014 07:42:35 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139171458
1
2
3
timerArray[0]['execute'] = 'takeTimeleapseShot'
...
timerArray[1]['execute'] = 'takeMovementShot'
Dat moet je veranderen in:
1
2
3
timerArray[0]['execute'] = takeTimeleapseShot
...
timerArray[1]['execute'] = takeMovementShot
pi_139171554
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
    
Dit ziet er vrij ingewikkeld uit. Kun je misschien het volgende proberen:
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))

En dan kijken of dit boven een bepaalde drempelwaarde uitkomt?

[ Bericht 0% gewijzigd door thabit op 23-04-2014 08:14:01 ]
pi_139171577
quote:
0s.gif Op woensdag 23 april 2014 07:55 schreef thabit het volgende:

[ code verwijderd ]

Dat moet je veranderen in:
[ code verwijderd ]

Dit werkte niet met deze array
1
2
timerArray = [{'each': 5,    'last': time.time(), 'time': 0, 'timemin': 0, 'timem...},
              {'each': 0.25, 'last': time.time(), 'time': 0, 'timemin': 0, 'timem...}]

Maar wel met mijn huidige 'array' :@ en ik zal die andere functie vanavond eens proberen! *) thanks!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 23 april 2014 @ 10:10:05 #131
187069 slacker_nl
Sicko pur sang
pi_139173545
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
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;

Verder zou ik niet

1
2
3
4
5
dir = my_custom_dir . '/' . iets(); doen

# maar 

os.path.join(my_custom_dir, iets(), dit(), dat());

Dat fixed je shit ook op een ander platform (denk Windows portability).

En verder had ik zo'n type interface ingedachte:

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();

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

[ Bericht 2% gewijzigd door slacker_nl op 23-04-2014 10:15:45 ]
In theory there is no difference between theory and practice. In practice there is.
pi_139174893
In een python script maak ik een (grote numpy) matrix. Die sla ik vervolgens op met pickle. Werkt prima. Vervolgens laad ik het bestand met pickle in een ander script, en dan zegt die MemoryError. :?
Als je 'm überhaupt kan maken, dan zou je 'm toch ook kunnen laden?
edit: bug in cPickle, want met pickle werkt het wel.

[ Bericht 7% gewijzigd door FastFox91 op 23-04-2014 13:24:46 ]
pi_139190157
quote:
0s.gif 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.
Krijg je geen kramp in je pink van al die puntkomma's?
pi_139190253
quote:
12s.gif Op woensdag 23 april 2014 19:39 schreef thabit het volgende:

[..]

Krijg je geen kramp in je pink van al die puntkomma's?
Blijft wennen. Die catch deed ik ook per ongeluk. :@
  woensdag 23 april 2014 @ 20:03:13 #135
187069 slacker_nl
Sicko pur sang
pi_139191111
quote:
12s.gif Op woensdag 23 april 2014 19:39 schreef thabit het volgende:

[..]

Krijg je geen kramp in je pink van al die puntkomma's?
Ja;
In theory there is no difference between theory and practice. In practice there is.
pi_139197465
:D Ik ga morgen avond even inhoudelijk reageren maar heb wel 1 vette bug gevonden, misschien dat jullie zo de oplossing zien; het zit hem in het opslaan van de video, in de volgende stukjes code kijk ik of er beweging is en zo ja dan wil ik deze gegevens opslaan, echter voegt hij niets toe maar overschrijft hij steeds het bestand, is het mogelijk om het steeds aan elkaar toe te voegen? of zit ik dan met 'headers' van het h264 bestand (heb daar nog niet de documentatie doorgelezen, ga ik morgen doen).

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)

stukje code komt van : https://github.com/wavefo(...)er/docs/recipes2.rst

Thanks wederom voor alle input, iets waar ik morgen weer ff mee bezig kan ;)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139198643
1open(filename, 'ab')
pi_139204499
quote:
0s.gif 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:
Klopt, op zich niet zo erg toch zolang het er maar geen 10+x in staat, maar heb het gelijk een functie gegeven ;)
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
Beter? :+
quote:
Verder zou ik niet ..

[ code verwijderd ]

Dat fixed je shit ook op een ander platform (denk Windows portability).
Ik gebruik idd no os.path.join, is duidelijker ;)

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
Doe ik reeds:
1camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight))

quote:
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).
Is idd handiger, ben er al druk doende mee ;)

quote:
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.
Klopt, hoeft ook niet, ga er gewoon vanuit dat het werkt :P dit scriptje hoeft niet alles af te vangen :D

quote:
0s.gif Op woensdag 23 april 2014 22:48 schreef thabit het volgende:
Ga ik proberen! :) maar ben bang dat h264 video's niet zo werken :P

Voorbeeld: http://pastebin.com/xwaczyJL

[ Bericht 6% gewijzigd door Chandler op 24-04-2014 08:08:26 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  vrijdag 25 april 2014 @ 15:46:26 #139
187069 slacker_nl
Sicko pur sang
pi_139253004
quote:
0s.gif 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? :+

Veel! Ik zie het ook vaker in je PHP code, dus je hebt er een handje naar ;)

quote:
Klopt, hoeft ook niet, ga er gewoon vanuit dat het werkt :P dit scriptje hoeft niet alles af te vangen :D

Dan kan die diskspace check er ook uit!
In theory there is no difference between theory and practice. In practice there is.
pi_139257965
quote:
0s.gif 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 ;)
Valt toch wel mee? :D

quote:
Dan kan die diskspace check er ook uit!
Kan, maar vind een nette exit wel een stuk leuker :P en die andere extra's zijn juist bedoeld dat als ik bestanden verplaats en per ongelijk de directory ook mee neem, deze ook weer aangemaakt worden.. maar goed ben nog maar net begonnen met Python! dus heb nog een lange weg te gaan!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139261229
Wel een heerlijke taal, Python. O+
pi_139261310
Op zich zekers, lekker basic zeg maar.. Alleen moet ik erg wennen aan het niet plaatsen van ; :P

Vrij snel voor mijn doeleinden! sneller iig dan PHP :P
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 29 april 2014 @ 19:49:41 #143
355592 Djurres
Knowledge, Fuck it.
pi_139386038
Ja, ik ga ook beginnen met python!
Mensen die hier bekend zijn met python icm de GPIO pinnen van een raspberry pi?
Tadumtiedum.
pi_139901427
Ik heb een script gevonden;
https://gist.github.com/astanin/626356

Nu wil ik deze gebruiken voor het vergelijken van afbeeldingen maar snap echt de ballen van de uitkomst van het script, ik zou liever in % willen zien hoeveel verschil er tussen de plaatjes zit.

Ik krijg nu resultaat terug in
Manhattan norm?
Zero norm?

Kan iemand mij hier een duidelijke uitleg over geven? eventueel helpen met aanpassen zodat ik het resultaat procentueel terug krijg? :D
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_140089548
Kwam een tijd terug Q tegen waarmee op CSV (bestanden) SQL queries uitgevoerd kunnen worden.

Voorbeelden:

find /tmp -ls | q "select c5,c6,sum(c7)/1024.0/1024 as total from - group by c5,c6 order by total desc"

q "select myfiles.c8,emails.c2 from exampledatafile myfiles join group-emails-example emails on (myfiles.c4 = emails.c1) where myfiles.c8 = 'ppp'"
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149464585
Te weinig activiteit, terwijl Python zo baas is.
pi_149465807
Ik heb vorige week mijn eerste functionele python scriptje gemaakt.
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()
En nu bediend ik mijn volume met de kaku afstandbediening. :7
pi_149465844
quote:
14s.gif 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. :7
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.

Wat ik wel eens heb is dat ik een grote batch met videobestanden download, die meerdere audio tracks hebben. Met mkvmerge kun je makkelijk de audio-tracks die je niet wilt verwijderen, maar dit zou je dan voor elk bestand moeten doen. Met Python had ik ook een quick 'n dirty-scriptje gemaakt dat even langs de bestanden itereert.

https://github.com/robin0(...)master/dubremover.py
pi_149466000
Ik heb echt een bloedhekel aan shell scripting, het is zo'n ontiegelijke syntactische bende... Krijg het nooit voor elkaar dat het gewoon in een keer werkt. Ik heb eerder voor ditsoort scriptjes vaak gewoon PHP gebruikt omdat ik dat ken, maar ga toch vaker python gebruiken denk ik. Toch wel erg makkelijk.
  zondag 8 februari 2015 @ 14:40:55 #150
230788 n8n
Pragmatisch
pi_149471609
Dwingt python nou 4 spaties af of mogen het ook tabs zijn? Beide uiteraard niet door elkaar
Specialization is for insects”.—Robert Heinlein
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')