必要なライブラリ アップロードには okhttp を使用します ( ライブラリとしては okio も必要です ) JFrame を新しく作成して WEBカメラの映像をリアルタイムに表示しています。ライブラリは、webcam-capture を使用していますが、他のライブラリとして bridj-0.6.2.jar と slf4j-api-1.7.2.jar が同梱されていましたが、slf4j はもっと新しいバージョンがあり、いずれにしても slf4j-nop-1.7.25.jar が必要だったので、現時点で最新版の slf4j-api-1.7.25.jar をダウンロードして使用しました。 ( Failed to load class org.slf4j.impl.StaticLoggerBinder が出る場合 ) 単純な環境ならば、Maven が簡単です。(一つの IP で多くのアクセスがある場合は問題が出ます) 配布元のサンプルコード How to display image from webcam in Swing panel (basic) JFrame にロードする場合は、自動的に open されるようです。 WindowBuildewr のソースコード プロジェクトの作成は、通常プロジェクトに WindowBuilder の JFrame を作成したものです。WindowBuilder の導入は『Pleiades All in One(NEON) で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] )』を参照して下さい
import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import com.github.sarxos.webcam.Webcam; import com.github.sarxos.webcam.WebcamPanel; import com.github.sarxos.webcam.WebcamResolution; import okhttp3.Call; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class Main extends JFrame { private JPanel contentPane; private Webcam webcam; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main frame = new Main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 559, 444); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton("New button"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { File targetFile; // get image BufferedImage image = webcam.getImage(); // save image to PNG file targetFile = new File("c:\\temp\\test.png"); try { ImageIO.write(image, "PNG", targetFile); } catch (IOException e1) { // TODO 自動生成された catch ブロック e1.printStackTrace(); } OkHttpClient client = new OkHttpClient(); MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder(); multipartBodyBuilder.setType(MultipartBody.FORM); multipartBodyBuilder.addFormDataPart( "target", targetFile.getName(), RequestBody.create(MediaType.parse("image/png"),targetFile) ); RequestBody requestBody = multipartBodyBuilder.build(); // 送信用のデータを作成 Request.Builder requestBuilder = new Request.Builder(); String url = "https://ドメイン/パス/file_upload.php"; requestBuilder.url(url); requestBuilder.post(requestBody); Request request = requestBuilder.build(); // 受信用のオブジェクトの準備 Call call = client.newCall(request); String result = ""; // 送信と受信 try { Response response = call.execute(); result = response.body().string(); } catch (Exception ex) { ex.printStackTrace(); } System.out.println(result); } }); btnNewButton.setBounds(12, 10, 135, 21); contentPane.add(btnNewButton); loadWebCam(); } private void loadWebCam(){ webcam = Webcam.getDefault(); webcam.setViewSize(WebcamResolution.VGA.getSize()); WebcamPanel panel = new WebcamPanel(webcam); panel.setFPSDisplayed(true); panel.setDisplayDebugInfo(true); panel.setImageSizeDisplayed(true); panel.setMirrored(true); JFrame window = new JFrame("Webcam Panel"); window.getContentPane().add(panel); window.setResizable(true); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.pack(); window.setVisible(true); } }
WEBサーバの PHP アップロードの name は target で固定です。
<?php session_cache_limiter('nocache'); session_start(); header( "Content-Type: application/json; charset=utf-8" ); if ( $_SERVER['REQUEST_METHOD'] == "POST" ) { $upload = realpath ( '.' ); $upload .= ( DIRECTORY_SEPARATOR . $_FILES['target']['name'] ); if ( move_uploaded_file( $_FILES['target']['tmp_name'], $upload ) ) { $_POST['result'] = "アップロードに成功しました"; } else { $_POST['result'] = "アップロードに失敗しました"; } } else { $_POST['result'] = "POST メソッドを使用して下さい"; } $_POST['files'] = $_FILES; print json_encode($_POST, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE ); ?>
関連する記事 PHP : MastodonOAuthPHP の HttpRequest.php の http_request を public に書き換えて、ファイルアップロード メインの JFrame 内の JPanel に表示する
private void loadWebCam(){ webcam = Webcam.getDefault(); webcam.setViewSize(WebcamResolution.VGA.getSize()); WebcamPanel panel = new WebcamPanel(webcam); panel.setFPSDisplayed(true); panel.setDisplayDebugInfo(true); panel.setImageSizeDisplayed(true); panel.setMirrored(true); panelInFrame.add(panel); }
IP カメラを使用する場合 ライブラリのダウンロード(webcam-capture-driver-ipcam) IP カメラは、WEBカメラを Gmax M-JPEG version を使用しています( exe ファイルを VirusTotal でチェックししています )
// *************************** // JFrame に IP Cam // *************************** private void loadIpWebCam(){ Webcam.setDriver(new IpCamDriver()); try { IpCamDeviceRegistry.register(new IpCamDevice("lightbox", "http://192.168.1.4:8088/", IpCamMode.PUSH)); } catch (MalformedURLException e) { e.printStackTrace(); } JFrame window = new JFrame("Webcam Panel"); window.getContentPane().add(new WebcamPanel(Webcam.getDefault())); window.setResizable(true); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.pack(); window.setVisible(true); webcam = Webcam.getDefault(); } // *************************** // JFrame 内の JPanel に IP Cam // *************************** private void loadIpWebCam2(){ Webcam.setDriver(new IpCamDriver()); try { IpCamDeviceRegistry.register(new IpCamDevice("lightbox", "http://192.168.1.4:8088/", IpCamMode.PUSH)); } catch (MalformedURLException e) { e.printStackTrace(); } panelInFrame.add(new WebcamPanel(Webcam.getDefault())); webcam = Webcam.getDefault(); }
|
【java : WindowBuilderの最新記事】
- WindowBuilder JFace : WEB より JSON を取得して Table に表示する
- Pleiades All in One で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] )
- Java WindowBuilder から超簡易掲示板(CSVタイプ)投稿
- WindowBuilder のテーブルコントロールにインターネットから JSON データを読み込んで処理するテンプレート
- WindowBuilder テンプレートのテーブルコントロールに MySQL のデータを表示する
- Eclipse 4.4 Pleiades + WindowBuilder テンプレート / アプリケーションウインドウとダイアログ / インポート手順