導航:首頁 > 操作系統 > android控制攝像頭

android控制攝像頭

發布時間:2022-10-06 20:55:25

1. android開發,能否通過wifi熱點實現控制PC上的攝像頭,求高人指點。

理論上是可行的。但PC和android之間還是需要通信。

PC上攝像頭,都是由驅動來控制硬體的。程序的請求發送給驅動,然後驅動再發送給操作系統,然後再操作硬體。

程序
------
驅動
------
操作系統
------
硬體

大概就是這個結構。

所以,android控制PC上攝像頭,也就是你得從android發送指令或者數據、控制命令什麼的,然後讓硬體、驅動或者程序作出響應。

android之間,既然臉上了wifi,你完全可以使用TCP/IP或者UDP協議什麼的進行通信。android發送指令或者數據,然後pc上寫個程序監測你指定的TCP/IP或者UDP協議中指明的地址和埠,得到你要的指令和數據,再控制攝像頭即可。

pc控制攝像頭,使用windows的API也可以,使用OpenCV也可以。

這樣就實現你的要求了。

2. 怎麼調用android的攝像頭拍照

我們要調用攝像頭的拍照功能,顯然
第一步必須加入調用攝像頭硬體的許可權,拍完照後我們要將圖片保存在SD卡中,必須加入SD卡讀寫許可權,所以第一步,我們應該在Android清單文件中加入以下代碼
<uses-permission android:name="android.permission.CAMERA"/>//攝像頭許可權
SD卡讀寫許可權
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步,要將攝像頭捕獲的圖像實時地顯示在手機上。
我們是用SurfaceView這個視圖組件來實現的,因此在main.xml中加入下列代碼
<SurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surfaceview"
/>
第三步,設置窗口的顯示方式
首先獲得當前窗口Windowwindow = getWindow();//得到窗口
接著設置沒有標題requestWindowFeature(Window.FEATURE_NO_TITLE);//沒有標題
接著設置全屏 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//設置全屏
當然,我們在拍照過程中,屏幕必須一致處於高亮狀態,因此接著加入下面代碼
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//設置高亮
至此,我們將窗口的顯示方式規定死了,然後才能設置窗口上顯示的組件(順序非常重要)
setContentView(R.layout.main);
第四步,設置SurficeView顯示控制項的屬性
找到surficeView
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
設置它的像素為800x600
surfaceView.getHolder().setFixedSize(800,480);
//下面設置surfaceView不維護自己的緩沖區,而是等待屏幕的渲染引擎將內容推送到用戶面前
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
第五步,就是為surficeView加入回調方法(callBack)
surfaceView.getHolder().addCallback(newSurfaceCallback());
上面的回調類是我們自己定義的,代碼如下
private class SurfaceCallback implementsSurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolderholder) {
try {
camera = Camera.open();//打開硬體攝像頭,這里導包得時候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display = wm.getDefaultDisplay();//得到當前屏幕
Camera.Parameters parameters =camera.getParameters();//得到攝像頭的參數
parameters.setPreviewSize(display.getWidth(),display.getHeight());//設置預覽照片的大小
parameters.setPreviewFrameRate(3);//設置每秒3幀
parameters.setPictureFormat(PixelFormat.JPEG);//設置照片的格式
parameters.setJpegQuality(85);//設置照片的質量
parameters.setPictureSize(display.getHeight(),display.getWidth());//設置照片的大小,默認是和屏幕一樣大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通過SurfaceView顯示取景畫面
camera.startPreview();//開始預覽
isPreview = true;//設置是否預覽參數為真
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}

@Override
public void surfaceChanged(SurfaceHolderholder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolderholder) {
if(camera!=null){
if(isPreview){//如果正在預覽
camera.stopPreview();
camera.release();
}
}
}
}
第六步,我們必須對按鍵事件進行監聽,如是拍照還是聚焦,代碼如下
public boolean onKeyDown(int keyCode,KeyEvent event) {//處理按鍵事件
if(camera!=null&&event.getRepeatCount()==0)//代表只按了一下
{
switch(keyCode){
case KeyEvent.KEYCODE_BACK://如果是搜索鍵
camera.autoFocus(null);//自動對焦
break;
case KeyEvent.KEYCODE_DPAD_CENTER://如果是中間鍵
camera.takePicture(null, null, new TakePictureCallback());//將拍到的照片給第三個對象中,這里的TakePictureCallback()是自己定義的,在下面的代碼中
break;
}
}
return true;//阻止事件往下傳遞,否則按搜索鍵會變成系統默認的
}
------------------------------------------------------------------------------------------
private final class TakePictureCallbackimplements PictureCallback{
public void onPictureTaken(byte[] data,Camera camera) {
try {
Bitmap bitmap =BitmapFactory.decodeByteArray(data, 0, data.length);
File file = newFile(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream outputStream = newFileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100,outputStream);
outputStream.close();
camera.stopPreview();
camera.startPreview();//處理完數據之後可以預覽
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
注意,代碼中有兩個回調類,一個是SurfaceCallback(),另外一個是TakePictureCallback(),初學者可能一時難以理解,通俗地講,前者是用來監視surficeView這個暫時存放圖片數據的顯示控制項的,根據它的顯示情況調用不同的方法,包括surfaceCreated(),surfaceChanged(),surfaceDestroyed(),也就不難理解為什麼會有這三個回調方法了(注意,在surfaceDestroyed()方法中必須釋放攝像頭,詳細代碼參見上方)。TakePictureCallback()是為了監視是否拍照而設計的介面,期中也僅有一個方法,camera將拍照得到的數據傳入方法,我們便可以對拍照得到的數據進行進一步處理

3. Android如何調用攝像頭

這個許可權的話通常都是軟體會自動獲取的,像有些軟體需要獲取手機的攝像頭調用許可權,通常都會默認配置的。如果自己禁止了某些軟體調用攝像頭,這種情況的話,只需要在手機設置的許可權管理裡面自己設置一下離學校有攝像頭就可以了。

4. 如何用Android手機遠程開啟電腦攝像頭實現視頻監控!

可以讓用戶通過Android手機隨時隨、安全快捷地遠程式控制制家中或辦公室的PC電腦,並使用其中的文件、圖片、音樂、視頻和各類應用軟體;除遠程桌面功能外,還可以用手機遠程訪問PC電腦的文件系統,在手機與PC電腦間傳送文件;更強大的是,可以用手機遠程開啟電腦攝像頭進行視頻通話或視頻監控,實現傳說中的「千里眼,順風耳」!

5. 如何實現android手機攝像頭的的自動對焦

1 使用一個定時器,設定定時時間,然後不間斷的對焦。

2 利用驅動層實現

3 觀察系統的原生相機得知,這東東也沒用定時器啊,貌似也不可能復雜到全用驅動來實現,即使底層用的是C 實現,但是理論上講,google肯定會提供這個封裝好東東。於是果斷的去查閱 DOC 一看,發現果然有這個東東 : 代碼如下[java] view plain print?
<strong><span style="font-size:18px">public class MainActivity extends Activity {

private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean flag = false;
private String fileUrl="";
Camera camera;
Camera.Parameters parameters;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
Button button=(Button) findViewById(R.id.takepicture);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera=null;

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(null==camera){
camera=Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
initCamera();
camera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
//實現自動對焦
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
initCamera();//實現相機的參數初始化
camera.cancelAutoFocus();//只有加上了這一句,才會自動對焦。
}
}

});
}

});
}
//相機參數的初始化設置
private void initCamera()
{
parameters=camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定製手機,無法正常識別該方法。
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1連續對焦
setDispaly(parameters,camera);
camera.setParameters(parameters);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要實現連續的自動對焦,這一句必須加上

}

//控制圖像的正確顯示方向
private void setDispaly(Camera.Parameters parameters,Camera camera)
{
if (Integer.parseInt(Build.VERSION.SDK) >= 8){
setDisplayOrientation(camera,90);
}
else{
parameters.setRotation(90);
}

}

//實現的圖像的正確顯示
private void setDisplayOrientation(Camera camera, int i) {
Method downPolymorphic;
try{
downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});
if(downPolymorphic!=null) {
downPolymorphic.invoke(camera, new Object[]{i});
}
}
catch(Exception e){
Log.e("Came_e", "圖像出錯");
}
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);

return true;
}}</span></strong>

6. 用c語言怎麼實現android手機調用攝像頭

android 中實現網頁調用攝像頭功能方法·如下:
1/apk/res/android"
xmlns:tools="schemas/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CameraWebviewActivity" >

<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Camera"
android:layout_alignParentTop="true"
/>

<WebView
android:id="@+id/wv"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_below="@+id/bt"
/>

</RelativeLayout>
4.、編寫activity:
public class CameraWebviewActivity extends Activity {

private final static String TAG = "CameraWebviewActivity";

private Button bt;
private WebView wv;
public String fileFullName;//照相後的照片的全整路徑
private boolean fromTakePhoto; //是否是從攝像界面返回的webview

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera_webview);
initViews();
}

private void initViews() {

bt = (Button) findViewById(R.id.bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("----------------");
takePhoto( Math.random()*1000+1 + ".jpg");
}
});

wv = (WebView) findViewById(R.id.wv);
WebSettings setting = wv.getSettings();
setting.setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

});

wv.setWebChromeClient(new WebChromeClient(){
@Override//實現js中的alert彈窗在Activity中顯示
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, message);
result.confirm();
return true;
}
});

wv.loadUrl("file:///android_asset/index.html");
final Handler mHandler = new Handler();
//webview增加javascript介面,監聽html頁面中的js點擊事件
wv.addJavascriptInterface(new Object(){
public String clickOnAndroid() {//將被js調用
mHandler.post(new Runnable() {
public void run() {
fromTakePhoto = true;
//調用 啟用攝像頭的自定義方法
takePhoto("testimg" + Math.random()*1000+1 + ".jpg");
System.out.println("========fileFullName: " + fileFullName);

}
});
return fileFullName;
}
}, "demo");
}

/*
* 調用攝像頭的方法
*/
public void takePhoto(String filename) {
System.out.println("----start to take photo2 ----");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_MEDIA_TITLE, "TakePhoto");

//判斷是否有SD卡
String sdDir = null;
boolean isSDcardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(isSDcardExist) {
sdDir = Environment.getExternalStorageDirectory().getAbsolutePath();
} else {
sdDir = Environment.getRootDirectory().getAbsolutePath();
}
//確定相片保存路徑
String targetDir = sdDir + "/" + "webview_camera";
File file = new File(targetDir);
if (!file.exists()) {
file.mkdirs();
}
fileFullName = targetDir + "/" + filename;
System.out.println("----taking photo fileFullName: " + fileFullName);
//初始化並調用攝像頭
intent.putExtra(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileFullName)));
startActivityForResult(intent, 1);
}

/*
* (non-Javadoc)
* @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
* 重寫些方法,判斷是否從攝像Activity返回的webview activity
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("----requestCode: " + requestCode + "; resultCode " + resultCode + "; fileFullName: " + fileFullName);
if (fromTakePhoto && requestCode ==1 && resultCode ==-1) {
wv.loadUrl("javascript:wave2('" + fileFullName + "')");
} else {
wv.loadUrl("javascript:wave2('Please take your photo')");
}
fromTakePhoto = false;
super.onActivityResult(requestCode, resultCode, data);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.camera_webview, menu);
return true;
}

}

7. 如何用Android手機遠程開啟電腦攝像頭實現視頻監控!

用Android手機遠程開啟電腦攝像頭實現視頻監控可以通過下載相關軟體得以實現,比較安全常用的軟體是網易移動辦公:
然後選擇需要連接的設備即可進行控制:

8. 如何實現android手機攝像頭的的自動對焦

參考下面方法

根據現有的資料有如下幾種:
1 極端人物的做法: 使用一個定時器,設定定時時間,然後不間斷的對焦。
2 極客人物的做法: 那就是利用驅動層實現,但是這個一般人還是算了吧
3 就本人這樣的觀察系統的原生相機得知,這東東也沒用定時器啊,貌似也不可能復雜到全用驅動來實現,即使底層用的是C 實現,但是理論上講,google肯定會提供這個封裝好東東。於是果斷的去查閱 DOC 一看,發現果然有這個東東 : 代碼如下

[java] view plain print?
<strong><span style="font-size:18px">public class MainActivity extends Activity {

private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean flag = false;
private String fileUrl="";
Camera camera;
Camera.Parameters parameters;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
Button button=(Button) findViewById(R.id.takepicture);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera=null;

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(null==camera){
camera=Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
initCamera();
camera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
//實現自動對焦
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
initCamera();//實現相機的參數初始化
camera.cancelAutoFocus();//只有加上了這一句,才會自動對焦。
}
}

});
}

});
}
//相機參數的初始化設置
private void initCamera()
{
parameters=camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定製手機,無法正常識別該方法。
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1連續對焦
setDispaly(parameters,camera);
camera.setParameters(parameters);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要實現連續的自動對焦,這一句必須加上

}

//控制圖像的正確顯示方向
private void setDispaly(Camera.Parameters parameters,Camera camera)
{
if (Integer.parseInt(Build.VERSION.SDK) >= 8){
setDisplayOrientation(camera,90);
}
else{
parameters.setRotation(90);
}

}

//實現的圖像的正確顯示
private void setDisplayOrientation(Camera camera, int i) {
Method downPolymorphic;
try{
downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});
if(downPolymorphic!=null) {
downPolymorphic.invoke(camera, new Object[]{i});
}
}
catch(Exception e){
Log.e("Came_e", "圖像出錯");
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);

return true;
}

}</span></strong>

9. 安卓模擬器3ds心靈寫真ar筆記本怎麼控制攝像頭

在設置語音控制。
在手機界面打開設置,之後在打開我的電腦,在我的電腦裡面粘貼目錄。共享目錄並登錄到安卓模擬器的攝像頭中,從而控制它。

10. Android開發怎麼調用攝像頭功能

1、現在Android智能手機的像素都會提供照相的功能,大部分的手機的攝像頭的像素都在1000萬以上的像素,有的甚至會更高。它們大多都會支持光學變焦、曝光以及快門等等。下面的程序Demo實例示範了使用Camera v2來進行拍照,當用戶按下拍照鍵時,該應用會自動對焦,當對焦成功時拍下照片。layout/activity_main.xml界面布局代碼如下:

3、接來了的MainActivity.java程序將會使用CameraManager來打開CameraDevice,並通過CameraDevice創建CameraCaptureSession,然後即可通過CameraCaptureSession進行預覽或拍照了。

閱讀全文

與android控制攝像頭相關的資料

熱點內容
720pjpg壓縮 瀏覽:525
經濟學人app怎麼用 瀏覽:733
thunderbird如何刪除伺服器 瀏覽:632
編譯內核模塊准備工作 瀏覽:186
protues單片機 瀏覽:679
淘寶想多開店怎麼租伺服器 瀏覽:580
小鹿情感app怎麼打不開了 瀏覽:325
可自編譯的C 瀏覽:62
vfl90壓縮機是哪個廠家 瀏覽:677
安卓系統游戲怎麼開發 瀏覽:410
抖助力app綁定的銀行卡怎麼辦 瀏覽:466
我的電腦文件夾打開方式 瀏覽:931
東莞加密u盤公司 瀏覽:137
graphvizlinux 瀏覽:438
智能手錶藍牙怎麼下載app 瀏覽:293
女程序員下班菜譜 瀏覽:260
加密貨幣買什麼比較靠譜 瀏覽:277
用圖片的地圖再編譯的地方 瀏覽:462
python監控系統進程 瀏覽:236
群暉怎麼取消照片共享文件夾 瀏覽:156