×
Namespaces

Variants
Actions

Archived:Detecção de movimento com a câmera, em PySymbian

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Tradução:
Por maiconherverton
Última alteração feita por hamishwillee em 31 May 2013

Este artigo demonstra como detectar movimentos usando a câmera do aparelho. O princípio básico é usar o aparelho para tirar fotos consecutivas e comparar as diferenaçs entre as fotos, para detectar movimentos.

Este artigo é inspirado na versão PIL (link broken: http://gumuz.looze.net/wordpress/index.php/archives/2005/06/06/python-webcam-fun-motion-detection/)

from appuifw import *
from graphics import Image
import camera, e32
#import miso # não escureça a luz
 
app.body = c = Canvas()
 
running = 1
def quit():
global running
running = 0
app.exit_key_handler=quit
 
def getdata(im, bpp=24):
import struct
im.save('D:\\pixels.png', bpp=bpp, compression='no')
f = open('D:\\pixels.png', 'rb')
f.seek(8 +8+13+4)
chunk = []
while True:
n = struct.unpack('>L', f.read(4))[0]
if n==0: break # pedaço 'IEND'
f.read(4) # 'IDAT'
chunk.append(f.read(n))
f.read(4) # CRC
f.close()
return ''.join(chunk).decode('zlib') # '\x00'prefixo de cada linha
 
last1 = '\x00' * 930 # can be anything
while running:
im = camera.take_photo('RGB', (160,120))
im.rectangle([(10,10),(40,40)], 0xff0000) # contorno vermelho
im.rectangle([(120,10),(150,40)], 0xff0000) # nenhum código para este quadro
# checa se o sopt está ativo
box = Image.new((30,30), 'L') # escala cinza
box.blit(im, (10,10,40,40))
data = getdata(box, 8)
# diferença de seleção para o movimento
pixdiff = 0
for i in range(len(data)):
if abs(ord(data[i])-ord(last1[i])) > 15: # começo do pixel 15/256
pixdiff += 1
if pixdiff > 90: # começo da img 90/900
im.rectangle([(10,10),(40,40)], fill=0xff0000) # fill
break # motimento detectado
last1 = data
c.blit(im, (0,0), (8,12)) # exibe a camera
#miso.reset_inactivity_time()
This page was last modified on 31 May 2013, at 04:07.
63 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×