ともさんのHP >プロブラミング >自作JavaLibrary >USBカメラをJAVAで制御

USBカメラをJAVAで制御

USBカメラを使って定期的に撮影したいと思っていたので、JAVAでプログラムを作りました。

いつものように見知らぬネット上の諸先輩方に教えていただきました。ありがとうございます。

JAVAでUSBカメラを操作するリンク

S_a_k_Uさん

JAVA 楽天 の道

永江孝規研究室@東京工芸大学さん

準備の仕方などは上のリンクをご覧ください。

UBSカメラ 楽天 をWebに繋いで定点観測をするためのフリーソフトとかもあるようですが、 やはり自分で組んだプログラムの方が融通が利きます。自宅サーバーにつけてWEB カメラ 楽天  にしたり、植物の成長を記録したりと、いろいろ楽しめそうです。

左の画像は実際に撮影したもの。画像の隅に時刻等を入れるようにしました。 Jpg形式で保存すると、左のように字がぼやけてしまいます。 Png形式で保存すれば字はぼやけませんが、ファイルサイズが10倍くらいになります。

広告

朝、出勤する前にプログラムを起動して一日動かしてみました。画像は0.3倍にしてあります。 2枚目に出社を急ぐ私の腹が写っていますが、他には当たり前ですが何にも写っていません。

誰もいない部屋に、お化けとか、ドロボウとか、写っていたら面白かったのですが...

JPG画像をつなげて動画(MOV形式)を作ることも、Javaで出来ます。方法はこちらをご覧ください。

JAVAで自動撮影した画像

JAVAでUSBカメラを自動撮影するためのソースプログラム

下がJAVAのソースファイルです。

10分毎にUSBカメラの画像を読み込んで、画像に文字を挿入し、 時刻-撮影番号を示すファイル名でJPGファイル化して保存するように書いてあります。

import javax.media.*;

import javax.media.control.FrameGrabbingControl;

import javax.media.format.VideoFormat;

import javax.media.util.BufferToImage;

import javax.swing.*;

import java.awt.*;

import java.util.*;

public class test implements Runnable{

Thread timer;

Image img = null;

java.awt.image.BufferedImage ssimg = null;

Jframe frame =null;

Player player = null;

public test()

{

ini();

}

public void ini()

{

//USBカメラとの接続

try{

frame = new Jframe("USB-Camera");

frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);

player = Manager.createRealizedPlayer(new MediaLocator("vfw://0"));

frame.setBounds(50, 50, 320, 240);

frame.getContentPane().add(player.getVisualComponent());

frame.setVisible(true);

player.start();

}catch(Exception e){};

//タイマースタート

timer = new Thread(this);

timer.start();

}

// 実行関数

public void run()

{

//カウンタ

int i=0;

//無限ループ

do{

//600秒休憩

try{ timer.sleep(600000);}catch(InterruptedException e){}

i++;

//画像をバファードイメージに入れる

FrameGrabbingControl frameGrabber = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");

Buffer buf = frameGrabber.grabFrame();

BufferToImage b2i = new BufferToImage((VideoFormat) buf.getFormat());

img = b2i.createImage(buf);

ssimg = new java.awt.image.BufferedImage( 320, 240 ,img.SCALE_SMOOTH );

Graphics g = null;

g = ssimg.getGraphics() ;

g.drawImage(img, 0, 0, Color.white, null) ;

//保存ファイル名の作成

String fname = ""+I;

while(true){if( fname.length() < 5){ fname = "0" + fname; }else{break;}}

fname = "Date"+CalendarToString()+"-No"+ fname;

//画像に文字を記入

g.setColor( java.awt.Color.red );

g.drawString( fname , 5 , 235 );

//ファイルに保存

// savePng(ssimg,fname);

saveJpg(ssimg,fname);

saveJpg(ssimg,"image");

// System.exit(0);

}while(true);

}

//PNG形式で保存

public void savePng(java.awt.image.BufferedImage ssimg ,String fname )

{

try {

java.io.File f = new java.io.File( fname + ".png" );

javax.imageio.ImageIO.write( ssimg , "png", f );

f=null;

}catch (Exception e) { e.printStackTrace(); }

}

//JPG形式で保存

public void saveJpg(java.awt.image.BufferedImage ssimg ,String fname )

{

try {

java.io.File f = new java.io.File( fname + ".jpg" );

javax.imageio.ImageIO.write( ssimg , "jpg", f );

f=null;

}catch (Exception e) { e.printStackTrace(); }

}

広告

//現在の時刻を示す文字列を作成

public String CalendarToString()

{

String stmp = "";

Calendar c = Calendar.getInstance(); //一時使用カレンダの作成

int yr = c.get(Calendar.YEAR); int mn = c.get(Calendar.MONTH);

int dy = c.get(Calendar.DATE); int hr = c.get(Calendar.HOUR_OF_DAY);

int min = c.get(Calendar.MINUTE); int sec= c.get(Calendar.SECOND);

String nowstring = Integer.toString(yr);

stmp = Integer.toString( mn+1 ); if( stmp.length() < 2){ stmp = "0" + stmp; } nowstring = nowstring + stmp;

stmp = Integer.toString( dy ); if( stmp.length() < 2){ stmp = "0" + stmp; } nowstring = nowstring + stmp;

stmp = Integer.toString( hr ); if( stmp.length() < 2){ stmp = "0" + stmp; } nowstring = nowstring + stmp;

stmp = Integer.toString( min ); if( stmp.length() < 2){ stmp = "0" + stmp; } nowstring = nowstring + stmp;

stmp = Integer.toString( sec ); if( stmp.length() < 2){ stmp = "0" + stmp; } nowstring = nowstring + stmp;

//+Integer.toString(dy)

// +Integer.toString(hr)+Integer.toString(min)+Integer.toString(sec);

c= null;

return nowstring;

}

public static void main(String args[]) throws Exception {

test t = new test();

}

}

最終更新日: 2016-10-28 07:42:11

ともさんのHP >プロブラミング >自作JavaLibrary >USBカメラをJAVAで制御

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

マムシに咬まれない対策  
自動水やり器の自作  
ボタンやラベルの修飾方法  
ツールチップの表示  
アイコンの差し替え  
日本ミツバチ用重箱式巣箱の各部名称と機能  
柿の消毒  
IMEの自動設定  
みつばち日記  
初心者用巣箱その1  
アプリ終了時にダイアログを表示  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます