原创

AI识别之旅一

说到AI识别,很多人会觉得很神秘很高大尚。但随着科技的发展AI已经逐步成熟和简单,这几天我们就围绕如何打造一个AI识别系统进行宣讲吧。

首先AI识别系统,肯定是通过类似视觉识别这样,有图才能有结果,当然你说语音识别就要语音才有结果。不过语音不是咱们这次的重点。我们以视觉识别为主。视觉识别肯定要通过摄像头获取外界或对应事物的情况,接下来,就是我们这篇文章的重点,如何在安卓上构建摄像头,也希望能使大家减少一些弯路。

由于我使用的是安卓开发板,摄像头是外置USB的家用普通摄像头一开始我是使用Android UVCCamera,但花了比较长的时间发现这个库用起来不容易架驽和不是太稳定;后来尝试使用安卓自己原生的摄像头库,想不到一下就成功了并且还挺稳定。那我们就用原生的库吧。

1、用原生库,首先肯定要进行授权。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

2、在XML里面构建视频播放的SurfaceView(播放窗口)。

<SurfaceView
    android:id="@+id/arc_hf_video_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

3、在程序中进行相关参数的定义。

protected Camera camera;//摄像头
private SurfaceView mSurfaceview;
private SurfaceHolder holder;
protected boolean isPreview;
mSurfaceview = (SurfaceView) this.findViewById(R.id.arc_hf_video_view);
holder = mSurfaceview.getHolder();

4、打开摄像头及生成图片。

try {
    camera = Camera.open();
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片的输出格式
    parameters.set("jpeg-quality", 85);// 照片质量
    camera.setParameters(parameters);
    camera.setPreviewDisplay(holder);
    camera.startPreview();
    isPreview = true;
} catch (Exception e) {
    e.printStackTrace();
}
//判断咯
if (camera != null) {
    Toast.makeText(view.getContext(), "给哥笑一个", Toast.LENGTH_SHORT).show();
    camera.autoFocus(null);
    camera.takePicture(null, null, new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Bitmap bitmap = BitmapFactory.decodeByteArray(data,    0, data.length);
            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/";
            String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";
            File out = new File(path);
            if (!out.exists()) {
                out.mkdirs();
            }
            out = new File(path, fileName);
            try {
                FileOutputStream outStream = new FileOutputStream(out);
                bitmap.compress(CompressFormat.JPEG, 100, outStream);
                outStream.close();
                camera.startPreview();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //camera.stopPreview();
            //camera.release();
            //camera = null;
            showMsg("拍照成功"+fileName);
        }
    });
}else {
    Toast.makeText(view.getContext(),"没相机拍个啥", Toast.LENGTH_SHORT).show();
}

完成以上就构建了安卓原生的摄像头,并进行拍照;拍的照片保存在安卓的DCIM/Camera目录里面。

这样我们的AI识别之旅就算踏出了第一~

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

相关文章

  • 安卓自启动设置

    最近搞一个项目,是安卓的客户端;要求安卓启动后自动启动。本来想通过外挂进行系统启动时自动启动,但发现大多不能用。于是只能在代码级进行处理。处理如下:

    谭广健
  • MVC 路由跳转

    MVC路由跳转,基本上是MVC入门的必修课,但因为实际应用比较少,所以都遗忘得七七八八,今天突然想到要用一下,于是就重温一下吧.

    谭广健
  • 安卓系统签名方法2则

    最近一个安卓的项目,本来是使用安卓板4.2的;但由于生产需求将原来的单板集成到整体(显示触屏+安卓)。由于其提供的样板是6.0。整个程序的主功能运...

    谭广健
  • Android项目实战(七):Dialog主题Activity实现自定义对话框效果

    听着music睡
  • Android项目实战(七):Dialog主题Activity实现自定义对话框效果

    听着music睡
  • Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表

      前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成l...

    codingblock
  • ScrollView与ListView的事件冲突

    听着music睡
  • [Exception]之 starting Intent 应用启动失败异常

    项勇
  • 第26天面向对象编程之组合,多态,封装

    问题一: 既然是选课,肯定是要有课程的,因此我们需要为每个学生的特征上面重新添加上一些课程信息,包括的有课程名,课程时长,课程价格。因此出现了下面的修改的代码。

    py3study
  • [android] 在不同的activity之间传递数据

    添加<TextView/>控件,设置控件内容水平居中,android:gravity=”center_horizontal”

    陶士涵

扫码关注云+社区

领取腾讯云代金券