基于安卓的视频遥控小车(4)
时间:2022-05-26 14:01来源:mbb.eet-china.com 作者:RoachWZ 点击:
次
e1.printStackTrace(); } } } public void keyReleased(KeyEvent e) { int KeyCode = e.getKeyCode(); // 返回所按键对应的整数值 if(KeyCode==38||KeyCode==40||KeyCode==37||KeyCode==39) { try { ss = new Serve
e1.printStackTrace();
}
}
}
public void keyReleased(KeyEvent e) {
int KeyCode = e.getKeyCode(); // 返回所按键对应的整数值
if(KeyCode==38||KeyCode==40||KeyCode==37||KeyCode==39) {
try {
ss = new ServerSocket(7788);
stop();
sendFlag=false;
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void send(int i) throws Exception{
@SuppressWarnings("resource")
ServerSocket serverSocket = ss;//new ServerSocket(7788); // 创建ServerSocket对象
Socket client = serverSocket.accept(); // 调用ServerSocket的accept()方法接收数据
OutputStream os = client.getOutputStream();// 获取客户端的输出流
System.out.println("开始与客户端交互数据");
switch (i) {
case 38:os.write(("01").getBytes());break;//上
case 40:os.write(("02").getBytes());break;//下
case 37:os.write(("03").getBytes());break;//左
case 39:os.write(("04").getBytes());break;//右
}
System.out.println("结束与客户端交互数据");
os.close();
client.close();
}
protected void stop() throws Exception {
ServerSocket serverSocket = ss;// 创建ServerSocket对象
Socket client = serverSocket.accept(); // 调用ServerSocket的accept()方法接收数据
OutputStream os = client.getOutputStream();// 获取客户端的输出流
os.write(("05").getBytes());//停止
os.close();
client.close();
ss.close();
}
});
注意:
![基于安卓的视频遥控小车](https://assets-stash.oss-cn-shanghai.aliyuncs.com/forum/201907/09/110950oqof5uczf2nn5o64.png)
此部分源码链接http://www.pudn.com/Download/item/id/3913494.html
参考的文献感谢以下博主的文章
基于Socket的Android手机视频实时传输
camera拍摄视频并在电脑上显示
Android Studio+Eclipse 利用so基于安卓的视频遥控小车实现人脸跟随看起来好像高大上,其实是用的安卓自带的人脸检测API(FaceDetector),将其和红外发射代码结合起来,实现了小车人脸跟随功能。
![基于安卓的视频遥控小车](https://assets-stash.oss-cn-shanghai.aliyuncs.com/forum/201907/09/111517cj4y4ljyyyyazj4v.gif)
人脸检测的接口为FaceDetectionListener,
-
private class MyFaceDetectionListener implements Camera.FaceDetectionListener {
-
-
@Override
-
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
-
if (faces.length > 0){
-
Log.d("FaceDetection", "face detected: "+ faces.length +
-
" Face 1 Location X: " + faces[0].rect.centerX() +
-
"Y: " + faces[0].rect.centerY() );
-
}
-
}
-
}
通过Camera的setFaceDetedtionListener方法来接受底层检测到脸的回掉。
-
mCamera.setFaceDetectionListener(new MyFaceDetectionListener());
在摄像机开始预览了之后调用开始检测方法
-
private void startFaceDetection(){
-
// Try starting Face Detection
-
Camera.Parameters params = mCamera.getParameters();
-
-
// start face detection only *after* preview has started
-
if (params.getMaxNumDetectedFaces() > 0){
-
// camera supports face detection, so can start it:
-
mCamera.startFaceDetection();
-
}
-
}
以上为通用步骤,我对MyFaceDetectionListener进行了改造,
将其和红外发射代码transmit()方法结合起来,代码如下
-
private class MyFaceDetectionListener implements Camera.FaceDetectionListener{
-
private int faceX=0;
-
private int faceY=0;
-
boolean fMoveFlag = false;//设置标志位,只执行一次,不连续发送
-
boolean bMoveFlag = false;
-
boolean lMoveFlag = false;
-
boolean rMoveFlag = false;
-
Camera.Parameters parameters;
-
public MyFaceDetectionListener(Camera.Parameters parameters) {
-
this.parameters=parameters;
-
}
-
@Override
-
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
(责任编辑:admin)
|
织梦二维码生成器
------分隔线----------------------------