tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルデスクトップアプリでWEBカメラを使いたい
記事No11922
投稿日: 2017/10/24(Tue) 19:44
投稿者耳たぶ黒
いつもお世話になっています。超初心者の耳たぶ黒です。
開発環境はWindows10 vs2015proで作業しております。

Webカメラをアプリに組み込んで、ピクチャー画面にWEBカメラの画像表示させてボタンを押して
写真を撮影したいと思ってます。
過去の掲示板に同様の質問があったようですが、同様にコードを書いてもコンパイルエラーになってしまうので
お助け下さい。リンクも切れてしまっているのでよくわかりません。

*************************************
元質問:PictureBoxにUSBカメラの画像を.. - VBはじめたて 2006/02/06-09:57 No.3052

PictureBoxにUSBカメラの画像を簡単に表示させ、その画像を静止画で保存させる方法を
ご教授お願いします。
**********************************

[ツリー表示へ]
タイトルRe: デスクトップアプリでWEBカメラを使いたい
記事No11923
投稿日: 2017/10/24(Tue) 20:37
投稿者魔界の仮面弁士
スチルキャプチャなら、まずは DirectShow について調べてみると良いかと。


USB カメラや内蔵カメラなど、自 PC につながれたカメラについては、
昔ながらの Video for Windows で WM_CAP_FILE_SAVEDIB という手もあります。
https://dobon.net/vb/bbs/log3-7/3941.html
http://magayengineer.hatenablog.com/entry/2016/06/13/224309
http://www5a.biglobe.ne.jp/~kkw_pl2/kkwvbs/vbacamera.htm

あるいは、Windows.Media.Capture.MediaCapture クラスあたりで。
http://www.atmarkit.co.jp/ait/articles/1212/20/news068.html
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/ebc89f7d-d6d6-4490-9602-088d84501d01


自 PC につながれたカメラではなく、Web 上の定点カメラ
(IP ネットワークカメラ)の類であれば、MJPEG Decoder とか。
https://github.com/BrianPeek/mjpeg
http://milk-tea.myvnc.com/blog/adiary.cgi/0145
https://social.msdn.microsoft.com/Forums/ja-JP/d7700817-13e8-4550-9d56-99b9d86977e4/

[ツリー表示へ]
タイトルRe: デスクトップアプリでWEBカメラを使いたい
記事No11924
投稿日: 2017/10/24(Tue) 21:27
投稿者魔界の仮面弁士
> 過去の掲示板に同様の質問があったようですが、同様にコードを書いても
> コンパイルエラーになってしまうのでお助け下さい。

http://hanatyan.sakura.ne.jp/patio/read.cgi?no=152
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=3052&page=1920

のことであれば、SDK 付属の QuartzTypeLib (ActiveMovie control type library) を
参照設定する必要があるはずです。今でも入手できるのかは知りませんが。


> リンクも切れてしまっているのでよくわかりません。
下記に、代替リンクを掲載しておきます。


> 下記のご自分のサイトにも掲載されておられるので下記もご覧下さい。
> http://homepage1.nifty.com/yasunari/VB/VB2005/IBasicVideo.htm
移転先があるのかはわかりませんでしたが、下記からキャッシュページを参照できます。
https://web.archive.org/web/20131222213404/homepage1.nifty.com/yasunari/VB/VB2005/IBasicVideo.htm


> 上記がうまく動作しない場合は、下記を試して見て下さい。(同人が投稿されているコードです。)
> http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+201012/10120002.txt
こちらは下記に移動しています。DirectShowLib による実装例ですね。
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201012/10120002.txt


でもって、DirectShowLib についてはこちら。
http://directshownet.sourceforge.net
https://www.nuget.org/packages/DirectShowLib/

[ツリー表示へ]
タイトルRe^2: デスクトップアプリでWEBカメラを使いたい
記事No11925
投稿日: 2017/10/25(Wed) 13:23
投稿者耳たぶ黒
魔界の仮面弁士さん いつもありがとうございます。
教えていただいたものをよく読んで試させてもらいます。

[ツリー表示へ]
タイトルRe^3: デスクトップアプリでWEBカメラを使いたい
記事No11926
投稿日: 2017/10/25(Wed) 19:23
投稿者耳たぶ黒
魔界の仮面弁士さん、お世話になります。


教えていたサイトを試していたのですが、
***************************************************************
http://www.atmarkit.co.jp/ait/articles/1212/20/news068.html
******************************************************************

プロジェクトのPackage.appxmanifestファイルをVS 2012で開き、
[機能]タブで[マイク]と[Webカメラ]にチェックを入れる(次の画像)。
→Package.appxmanifestファイルが見つかりません。私がVS2015で作業をしているからなのか
超初心者だからか全然見つかりません。

教えていただいたサイト2
**********************
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/ebc89f7d-d6d6-4490-9602-088d84501d01
********************

「TargetPlatformVersionを設定してWinRTのdllを使用することを宣言」

参照も追加して、

サンプルコードを作動させようとしましたが、後半のコードの
Using mediaCapture1 As New MediaCapture()でmediaCapture1は名前空間 Windows.Media.Captureではあいまいです
というコンパイルエラーがでて進めなくなりました。

私がアホなので完全修飾で名前空間を指定すればいいのかと思い試みましたが、同様にあいまいですという
コンパイルエラーになりました。

アドバイス頂けると助かります。

[ツリー表示へ]
タイトルRe: デスクトップアプリでWEBカメラを使いたい
記事No11929
投稿日: 2017/11/01(Wed) 23:18
投稿者jikoryuu
http://note.websmil.com/vb/aforge/vb-net-aforge-usb%e3%82%ab%e3%83%a1%e3%83%a9%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba

このサイトが参考になるかと

これに画像保存を足してみました

AForgeのインストールは
http://robot-factory.blogspot.jp/search/label/%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
http://memo.everyday.jp/archives/356
が参考になるかと

ソースは以下

Imports AForge.Video
Imports AForge.Video.DirectShow

Public Class Form1

    Dim _videoSource As VideoCaptureDevice = Nothing

    'ビデオデバイスの起動
    Private Sub StartButton_Click(sender As Object, e As EventArgs) Handles StartButton.Click
        'ビデオ入力デバイスのみ取得
        Dim videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)
        If videoDevices.Count = 0 Then                        'ビデオデバイスが無い
            Return
        End If

        Dim MonikerString = videoDevices(0).MonikerString     '最初のビデオデバイスを使用

        _videoSource = New VideoCaptureDevice(MonikerString)
        AddHandler _videoSource.NewFrame, AddressOf Me.Video_NewFrame
        _videoSource.Start()
    End Sub

    'ビデオデバイスの停止
    Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
        If _videoSource Is Nothing Then
            Return
        End If

        If _videoSource.IsRunning Then
            _videoSource.SignalToStop()     'ビデオデバイスの停止
            _videoSource.WaitForStop()      '完全に停止するまで待つ
            _videoSource = Nothing
        End If
    End Sub

    'ビデオデバイス取得画像表示
    Private Sub Video_NewFrame(sender As Object, eventArgs As NewFrameEventArgs)
        Dim img = DirectCast(eventArgs.Frame.Clone(), Bitmap)
        PictureBox1.Image = img
    End Sub

    '画像を保存
    Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click
        PictureBox1.Image.Save("Test.bmp")
    End Sub
End Class

[ツリー表示へ]
タイトルRe^2: デスクトップアプリでWEBカメラを使いたい
記事No11930
投稿日: 2017/11/02(Thu) 13:12
投稿者jikoryuu
■補足説明

AForgeをインストールしたらそこから

AForge.Video.dll
AForge.Video.DirectShow.dll

をプロジェクトのフォルダーにコピーして入れて(貼り付けて)ください

そしてVisualStudioのソリューションエクスプローラーの「参照」を右クリック
「参照の追加(R)...」で参照マネージャのダイアログが表示されるので
右下の「参照」からコピーした AForge.Video.dll AForge.Video.DirectShow.dll
を指定してチェックしてください

するとImportsの名前空間が使えるようになります

コンパイルするとインポートしたdllファイルがbinディレクトリにコピーされることに注意

[ツリー表示へ]
タイトルRe^3: デスクトップアプリでWEBカメラを使いたい
記事No11942
投稿日: 2017/11/21(Tue) 17:04
投稿者耳たぶ黒
jikoryuu様 アドバイスありがとうございます。

返信が遅れてしまい申し訳ありません。windows10の端末で動作確認できました。
NugetでのAForge.videoの取得から丁寧な説明で助かりました。
とりあえずこれでアプリの開発を進められます。


魔界の仮面弁士様もありがとうございました。

[ツリー表示へ]
タイトルRe^3: デスクトップアプリでWEBカメラを使いたい
記事No11943
投稿日: 2017/11/22(Wed) 17:06
投稿者耳たぶ黒
jikoryuu様

お世話になっております。

下記の注意は他の端末でコンパイルしたものを動作させるにはbinディレクトリごとコピーしないといけませんよという注意でよろしいでしょうか?

> コンパイルするとインポートしたdllファイルがbinディレクトリにコピーされることに注意

知らなさ過ぎて恥ずかしいのですが、いつもコンパイルしたアプリの.exeファイルだけコピーしてきてそれを動かしていたのですが、今回は起動してくれませんでした。
初めてAForge.video.dllなどを使ったのでライブラリファイルをどうすればいいのかなと思っていました。
コンパイルした後のbinディレクトリごとコピーしたらプログラムが起動しました。

しかし、このプログラムを起動→終了するとそのあと同じアプリを起動しようとするとカメラが動かなくなります。フォームは展開するのですが、カメラが起動しない状況です。windowsのカメラを起動すると他のアプリケーションで使われていますという表示が出ます。タスクマネージャーで見ても動いているアプリは無いです。
再起動するとまた一回だけ使えるようになります。これってメモリ解放をしてないってやつですか?
アドバイスいただけると助かります。

[ツリー表示へ]
タイトルRe^4: デスクトップアプリでWEBカメラを使いたい
記事No11944
投稿日: 2017/11/22(Wed) 18:33
投稿者jikoryuu
カメラを起動させたままStopボタンを押さずにアプリを終了させるとカメラが起動したままになります
この場合はタスクマネージャーで強制終了させるしかありません

アプリケーションを終了させるときにカメラを止めるようにすると良いでしょう
Form1_Closedイベントに次のコードを加えてみてください

    Private Sub Form1_Closed(sender As Object, e As EventArgs) Handles Me.Closed
        If _videoSource Is Nothing Then
            Return
        End If

        If _videoSource.IsRunning Then
            _videoSource.SignalToStop()     'ビデオデバイスの停止
            _videoSource.WaitForStop()      '完全に停止するまで待つ
            _videoSource = Nothing
        End If
    End Sub

[ツリー表示へ]
タイトルRe^4: デスクトップアプリでWEBカメラを使いたい
記事No11945
投稿日: 2017/11/22(Wed) 18:40
投稿者jikoryuu
それからコンパイルしたアプリを移動するときにはコピーしたdllファイル
AForge.Video.dll
AForge.Video.DirectShow.dll
もアプリケーションと同じディレクトリに入れなければなりません
(他のファイルは必要ありません)

[ツリー表示へ]
タイトルRe^5: デスクトップアプリでWEBカメラを使いたい
記事No11949
投稿日: 2017/12/21(Thu) 16:27
投稿者耳たぶ黒
jikoryuu様

お世話になっております。返信がだいぶ遅れてしまいまして申し訳ありません。
とりあえず無事WEBカメラが止まらないで使えました。ありがとうございます。
しかし、既存のカメラアプリを使った時と比べると画面サイズが小さい事や正面カメラと裏面カメラの
切り替えボタンを作るとかいろいろ調べないとできなそうですね。
非常に助かりました。

[ツリー表示へ]