Exemplo de código para usar a câmera Mac em um programa?
-
09-06-2019 - |
Pergunta
Gostaria de usar a câmera do meu Macbook em um programa.Sou bastante agnóstico quanto à linguagem - C, Java, Python etc. estão bem.Alguém poderia sugerir o melhor lugar para procurar documentos ou código do tipo "Olá mundo"?
Solução
A estrutura ImageKit no Leopard tem um IKPictureTaker
classe que permitirá que você execute a folha ou painel padrão para tirar fotos que você viu no iChat e em outros aplicativos.
Se você não quiser usar a interface padrão do painel/folha do fotógrafo, você pode usar o Captura QTKit funcionalidade para obter uma imagem do iSight.
Ambos exigirão a escrita de algum código Cocoa em Objective-C, mas isso não deve ser um obstáculo atualmente.
Outras dicas
Se quiser manipular a câmera diretamente do seu código, você deve usar as APIs do QuickTime Capture ou o Captura QTKit de cacau invólucro (muito melhor).
A única ressalva é:se você usar um QTCaptureDecompressedVideoOutput, lembre-se de que os retornos de chamada não são feitos no thread principal, mas no thread de captura gerenciado pelo QuickTIme.Use [someObject performSelectorOnMainThread:...comObjeto:...waitUntilDone:NO] para enviar mensagens para um objeto no thread principal.
Existe um utilitário chamado isightcapture que é executado a partir da linha de comando unix, tira uma foto da câmera isight e a salva.
Você pode conferir neste site: http://www.macupdate.com/info.php/id/18598
Um exemplo de uso disso com AppleScript é:
Informe o aplicativo "Terminal" Do Script "/Applications/IsightCapture MyImage.jpg" End Tell
A partir de uma pergunta relacionada que pedia especificamente que a solução fosse pythônica, você deveria tentar camisola do motmot biblioteca de Andrew Straw.Também funciona com câmeras firewire, mas também funciona com a isight, que é o que você procura.
Do tutorial:
import motmot.cam_iface.cam_iface_ctypes as cam_iface
import numpy as np
mode_num = 0
device_num = 0
num_buffers = 32
cam = cam_iface.Camera(device_num,num_buffers,mode_num)
cam.start_camera()
frame = np.asarray(cam.grab_next_frame_blocking())
print 'grabbed frame with shape %s'%(frame.shape,)
É usado neste exemplo de demonstração de neurociência
Quartz Composer também é uma forma agradável de capturar e trabalhar com vídeo, quando aplicável.Há um patch de entrada de vídeo.
Quartz Composer é um ambiente de programação visual que se integra a um programa Cocoa maior, se necessário.
http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html
Outra solução é OpenCV + python com um script como:
import cv
capture = cv.CaptureFromCAM(0)
img = cv.QueryFrame(capture)
Não é possível fazer nada mais simples!