Webカメラからのライブプレビューのプレースホルダとして機能したいKivyウィジェットがあります。私はすでにウェブカメラのストリーム部分を把握していますが、空のImageウィジェットを埋めるためにストリームを取得することはできません(私はImageウィジェットを使用する必要があると仮定します)。Numpy Image ArrayデータでKivyウィジェットを更新する
カメラのウィジェットはUSBウェブカメラではないRaspberry Piカメラではうまく動作しないため、私はカメラウィジェットを使用していません。ここで
は私のカメラWidgetクラスのコードです:
class CV2Camera(BoxLayout):
def __init__(self, **kwargs):
super(CV2Camera, self).__init__(**kwargs)
self.vs = WebcamVideoStream(src=0).start()
def _finish_init(self, dt):
Clock.schedule_interval(self.update, .05)
def update(self, dt):
self.image = self.vs.read()
self.image = imutils.resize(self.image, width=1080)
self.image = np.fliplr(self.image)
self.video_texture = Texture.create(size=(self.image.shape[1], self.image.shape[0]), colorfmt='bgr')
self.video_texture.blit_buffer(self.image.tostring(), colorfmt='bgr', bufferfmt='ubyte')
self.video_panel = self.ids['camera_preview']
with self.video_panel.canvas as canvas:
Rectangle(texture=self.video_texture, pos=self.video_panel.pos, size=self.video_panel.size)
そして、ここでは私のレイアウトの宣言です:
<CV2Camera>
canvas.before:
PushMatrix
canvas.after:
PopMatrix
<PhotoBooth>:
Screen:
name: 'screen1'
GridLayout:
cols: 2
orientation: 'horizontal'
FloatLayout:
size_hint: 4, 1
CV2Camera:
id: camera
orientation: 'horizontal'
Image:
id: camera_preview
GridLayout:
cols: 1
Button:
text: "<-Previous Frame"
Button:
text: "Next Frame->"
Button:
text: "Take Picture!"
on_press: root.capture()
このコードは正常に動作が、私が得るすべてはどこ灰色の正方形であり、画像/カメラプレビューが表示されるはずです。私はKivyのアーキテクチャーには新しかったが、ここで私を得たウェブの例(this SO threadとthis Github projectなど)は、これがうまくいくはずであることを示しているようだ。ありがとう。
あなたはおかげでPalimは、上記で述べたように、内蔵のKivyカメラウィジェット選択しないhttps://kivy.org/docs/api-kivy.uix.camera.html – PalimPalim
を使用して試してみましたラズベリーパイカメラを「すぐに使える」ものにすることができました。私はそれを他の方法でも成功させるには時間がかかりました。 – John
申し訳ありませんが、十分に慎重に読んでいませんでした。 – PalimPalim