none
プログラミングの勉強についての質問

    質問

  • プログラミングの勉強のため、visual studio 2017とc言語を使って、windows内のカメラを呼び出し、バックグラウンドで自動的に写真を撮るプログラムを作りたいです。

    カメラを呼び出す方はできましたが、バックグラウンドで自動的に写真を撮る方はつまっています。それに関係があるサンプルプログラム、又は情報や資料はどこで入手しますか。

    2018年7月27日 1:50

すべての返信

  • 可燃ごみさん、こんにちは。フォーラム オペレーターの立花です。
    MSDN フォーラムへご投稿くださいましてありがとうございます。

    作成しているプログラムはどのようなアプリケーションか、なども
    ご記載いただいた方が情報が集まりやすくなると思いますので、
    よろしければご返信にて追記ください。
    例 ) MFC アプリケーション

    ご質問するときは下記スレッドが参考になりますので是非ご覧ください。
    フォーラムのご利用方法(質問の投稿)について

    フォーラム利用時の注意点のお知らせです。
    ※初めてご投稿された方を対象にお知らせしています。
    フォーラムでご質問頂くにあたっての注意点
    フォーラムへの回答に関するガイドラインおよびフォーラム運営について(再掲)
    ご意見、ご要望はこちらのフォーラムまで。
    各種設定方法はフォーラム内を [かんたん フォーラム ガイド] で検索してみてください。


    参考になった投稿には回答としてマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    2018年7月27日 2:01
    モデレータ
  •  C での情報は少ないと思います。Windows で C を使うことは、これからますます需要が少なくなると思われます。それでも C を使う or 使わなければならない理由がありますか?

     「バックグラウンド」を定義してください。自動的にファイルに書き出す“だけ”のプログラムを作り、他のことをするプログラムを別に作れば、「バックグラウンドで自動的に写真を撮っている」と言えます。ですから、あなたのいう「バックグラウンド」がどういう状態であるか、定義してください。
    なお、「ユーザーが UI を操作している裏で写真を撮り続ける」というのは、Windows の C ではほぼ諦めた方がよく(他にもっとプログラムを効率よく作ることができる言語がある)、「プログラミングの勉強のため」ということから想像されるあなたの知識量からも、諦めた方がよいと思われる、と申しておきます。


    Jitta@わんくま同盟

    2018年7月28日 5:02
  • 可燃ごみさん

    こんにちは。いただいた情報が少ない中でコメントを送付させていただきます。

    Visual C++ を使ってカメラの撮影などを比較的簡単に行えるプラットフォームとして OpenCV というものがあります。
    この辺りについて調べて勉強をされてはいかがでしょうか。
    インターネット上にも多くの情報がありますが、特に初心者の方には情報が整理された本を購入することを勧めさせていただきます。本の最初から順に作成していくことで比較的簡単な内容からステップアップできるはずです。
    大きめの本屋へいけばOpenCV関連の本はたくさん出ていますので、本に記載の内容に沿ってプログラムをまずは作成してみてはいかがでしょうか。
    Amazon で ”OpenCV” と検索するだけでも大量の本が出てきます。どれを選んだらよいか困るぐらいありますから、まずは可燃ごみさんが”やってみよう”と思える本を探しに本屋で閲覧してみてはいかがでしょうか。

    私の観点で比較的読みやすそうな本を以下に紹介させていただきます。
    (1) OpenCVで始める簡単動画プログラミング - 2018/6/1出版、北山洋幸(著)
    (2) 実践OpenCV3 for C++ 画像映像処理
    (3) 画像処理・機械学習プログラミング OpenCV3対応

    OpenCV を使えば、USBカメラとの接続やファイル保存はもちろん、最近はやりの顔認識などを含む高度な認識処理までステップアップ可能と考えます。

    以上、ご参考まで


    • 編集済み HIDE0707 2018年7月29日 7:18 情報追記
    2018年7月29日 1:31
  • Jittaさん

    返信ありがとうございます。

    私はCを使いたい理由は最初に習った言語がC言語ですので、実際使ったことがある言語を使うほうが理解も深まると考えたからです。他の理由はを申し上げます。プログラムを完成出来たら、さらにプログラムを改良して、撮った写真をOpenCVで処理しようとうことも考えています。

    「バックグラウンド」については、カメラが邪魔しない(見えない)ようにしたいという意味で使いました。Jittaさんが言った「自動的に写真を撮っている」は私のやりたいこととほぼ一致しています。そのようなプログラムを作りたいので何かアドバイスがありますか。

    2018年7月30日 14:53
  • 立花さん

    返信ありがとうございます。

    [環境]
    ・Visual Studio バージョン4.7.03056
    ・使用している言語の種類 :Visual C++ 2017
    ・実行環境の OSのバージョン :windows 64Bit 

    [機能の目的、仕様] 
    ・プログラムを開くとwindows内にあるカメラを立ち上げ、自動的に0.1秒間隔で写真を10枚まで撮り続ける、10枚越えた場合、一番古い写真を削除、プログラム停止後撮った写真をすべて削除。
    [問題点(つまづいている箇所)]
    ・ネットで調べてsystem("start \"\" \"microsoft.windows.camera:\"");を使ってカメラを立ち上げることまではできていますが、その後なにを書けば自動的に写真を撮るようになるのが分からない。

    私はかなりの初心者ですので、ご返信にあったリングを参考にして、分かる範囲で情報を追加してみました。

    2018年7月30日 15:12
  • [問題点(つまづいている箇所)]

    ・ネットで調べてsystem("start \"\" \"microsoft.windows.camera:\"");を使ってカメラを立ち上げることまではできていますが、その後なにを書けば自動的に写真を撮るようになるのが分からない。

    別のプログラムに任せており、かつ、そのプログラムは外部から制御できない仕組みなので、安定的には「実現できません」という回答になります。

    ただし、ユーザーの操作をシミュレートするような手段であれば無理矢理実現はできそうに見えます。
    たとえば、SendInput を使って Space キーの入力を行えばできると思われます(1803 環境でシャッターが効いていそうなのを画面のフラッシュで確認)が、カメラ以外のウィンドウをアクティブにされるとうまく動かなくなります。
    そういった制約付きでもよければ、SendInput について検索してみてください。

    安定的に実現するには、自分でウィンドウ(画面)を表示し、カメラに接続し、自分のウィンドウ内に動画を表示するというように、自分で一通り作らないといけないので、道のりは長いかもしれません。

    // OpenCV を使ったサンプルをベースに改造していくのが良いのかもしれない。(一例
    2018年7月30日 21:05
    モデレータ
  • UI は必要ないのですね?であっても、C はやはり勧められず、C++ への移行を勧めます。理由は、組み込み以外で純粋な C を使う場は少なく、これからも増えないことがほぼ確定であること、 C++ が C の規格をほぼ包含していることです。
    カメラ操作は HIDE0707さんが言及されている OpenCV が使いよいです。これも、一応 C の形式でアクセスできますが、3 以降は C のインターフェイスはメンテナンスされません(「されない」でよかったはず)。このことからも、C++ への移行を勧めます。「教えてもらう」ことにおいて、ウェブコミュニティはもっとも効率が悪いです。本を読むなど、もっと効率の良い方法を勧めます。

    Jitta@わんくま同盟

    2018年7月31日 3:21