package app.ui.callback;
/**
-
@author gao_chun
*/
public interface MyCallBack {
public void cameraHasOpened(); //Camera
public void toDistinguish(); //识别
}
2.CameraInterface类中的PictureCallback,提供回调set方法
public class CameraInterface {
private static final String TAG = “gao_chun”;
public boolean isCameraStop = false; //标记相机是否打开或关闭
private Camera mCamera;
private Camera.Parameters mParams;
private boolean isPreviewing = false;
private float mPreviwRate = -1f;
//识别回调
private MyCallBack mCallBack;
public void setmCallBack(MyCallBack mCallBack) {
this.mCallBack = mCallBack;
}
/**
- 拍照
*/
public void doTakePicture(){
if(isPreviewing && (mCamera != null)){
mCamera.takePicture(mShutterCallback, null, mJpegPictureCallback);
}
}
//对jpeg图像数据的回调,最重要的一个回调
PictureCallback mJpegPictureCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera) {
Log.i(TAG, “myJpegCallback:onPictureTaken…”);
Bitmap mBitmap = null;
if(null != data){
//data是字节数据,将其解析成位图
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
mCamera.stopPreview();
isPreviewing = false;
}
if(null != mBitmap)
{
Bitmap newBitmap = FileOperation.scaleToBitmap(mBitmap,FileOperation.scale);
//根据Bitmap图片宽高,按比例计算
/*int w = mBitmap.getWidth();
int h = mBitmap.getHeight();
int scale = 512; //默认比例
int max = w > h ? w : h;
float r = scale * 1.0f / max;
int ww = (int)Math.ceil(w * r);
int hh = (int)Math.ceil(h * r);
Bitmap mBitmap = FileOperation.zoomImg(rotaBitmap,ww,hh);*/
//FileOperation.delFile(FileOperation.FILENAME_ICON);//删除图片
FileOperation.saveBitmap(newBitmap,FileOperation.FILENAME_ICON);//保存图片
//回调方法,需要执行的操作
mCallBack.toDistinguish();
mBitmap = null;
newBitmap = null;
}
//再次进入预览
mCamera.startPreview();
isPreviewing = true;
}
};
}
3.CameraActivity类实现该接口和方法
public class CameraActivity extends TitleActivity implements MyCallBack {
/* (non-Javadoc)
-
@see app.ui.widget.TitleActivity#onClick(android.view.View)
-
点击拍摄图像,并回调处理
*/
@Override
public void onClick(View v) {
super.onClick(v);
switch(v.getId()){
case R.id.shutter:
CameraInterface.getInstance().doTakePicture(); //拍照
//判断SDcard中特征文件
if(!FileOperation.checkFileExist(FileOperation.FILENAME_AVG) ||
!FileOperation.checkFileExist(FileOperation.FILENAME_VEC)){
//读取assets目录下的文件写入sdcard
FileOperation.readAssetsAndWrite(this, “avg.txt”);
FileOperation.readAssetsAndWrite(this, “vec.txt”);
}
mLoading.show();
//设置识别回调
CameraInterface.getInstance().setmCallBack(this);
//不可再次点击
shutterView.setClickable(false);
break;
default:
break;
}
}
/* (non-Javadoc)
-
@see app.ui.callback.MyCallBack#toDistinguish()
-
图像识别
*/
@Override
public void toDistinguish() {
// TODO Auto-generated method stub
if(FileOperation.checkFileExist(FileOperation.FILENAME_ICON)){
getPictureFeature(); //提取图像特征
}else {
DialogUtils.showToast(CameraActivity.this,“图像保存不完整,请重新拍摄”);
}
}
/**
-
1.获得图像路径和特征文件
-
2.使用jni提取特征
-
3.访问服务器
*/
private void getPictureFeature(){
//读取图像和提取特征参数
mPicPath = FileOperation.getFilePath() + FileOperation.FILENAME_ICON;
mVecPath = FileOperation.getFilePath() + FileOperation.FILENAME_VEC;
mAvgPath = FileOperation.getFilePath() + FileOperation.FILENAME_AVG;
//Log.i(TAG,“mPicPath------------->”+mPicPath+"\n mVecPath----> “+mVecPath+”\n mAvgPath----> "+mAvgPath);
new Thread(){
public void run(){
UseOpensift obj = new UseOpensift();
mTempData = obj.getFeature(mPicPath,mVecPath,mAvgPath);
imageRecognition(mTempData); //提交数据
}
}.start();
}
}
?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
资源分享
- 最新大厂面试专题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
- 对应导图的Android高级工程师进阶系统学习视频
最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
专题**
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
[外链图片转存中…(img-WFnab2UV-1711773793215)]
- 对应导图的Android高级工程师进阶系统学习视频
最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!
[外链图片转存中…(img-EllhAQLI-1711773793215)]