嵌入式边缘计算——安卓车牌识别返回颜色

效果展示

1.导入下面这个库

 implementation 'com.github.HyperInspire:hyperlpr3-android-sdk:1.0.3'//车牌

2.代码编写

     private Bitmap ChePaiBitmap;//车牌图片
    private String ChePaiResult;//车牌结果
    private int Chepai_type;//车牌的类型
    private String Chepai_color;//车牌颜色
    /**
     * 识别车牌
     */
    //车牌识别
    private void ChePai() {
        ChePaiBitmap = null;
        ChePaiResult = "";
        Chepai_type=-1;
        new Thread(() -> {//开启线程
            Looper.prepare();
            ChePaiBitmap = MainActivity.INSTANCE.getBitmap();//获取当前视频流的图片,如果你这里报错,请参考我前面的文章。
            Log.e("图片大小", "w" + ChePaiBitmap.getWidth() + "h" + ChePaiBitmap.getHeight());

  //初始化车牌识别
// 车牌识别算法配置参数
            HyperLPRParameter parameter = new HyperLPRParameter()
                    .setDetLevel(HyperLPR3.DETECT_LEVEL_LOW)//设置识别水平
                    .setMaxNum(3)//可更改识别的车牌数量
                    .setRecConfidenceThreshold(0.85f);//设置精度
// 初始化(仅执行一次生效)
            HyperLPR3.getInstance().init(this, parameter);


            if (ChePaiBitmap != null) {
                Bitmap bcopy = ChePaiBitmap.copy(Bitmap.Config.ARGB_8888, true);
                Plate[] plates = HyperLPR3.getInstance().plateRecognition(ChePaiBitmap, HyperLPR3.CAMERA_ROTATION_0, HyperLPR3.STREAM_BGRA);
                if (plates.length > 0) {
                    Canvas canvas = new Canvas(bcopy);
                    Paint paint = new Paint();
                    paint.setColor(Color.RED);
                    paint.setStyle(Paint.Style.STROKE);
                    paint.setStrokeWidth(2.0f);
                    StringBuilder car = new StringBuilder();
                    StringBuilder car_color = new StringBuilder();
                    for (Plate plate : plates) {
                        // 打印检测到的车牌号
                        car.append(plate.getCode().substring(1)).append("\n");
                        Chepai_type =  plate.getType();
                        String color = Plate_color(Chepai_type);//自己定义的方法
                        car_color.append(color).append("\n");
                        canvas.drawRect(new android.graphics.Rect((int) plate.getX1(), (int) plate.getY1(), (int) plate.getX2(), (int) plate.getY2()), paint);
                    }
                    ChePaiResult = car.toString();//车牌结果
                    ChePaiBitmap = bcopy;//框出车牌后的图片
                    Chepai_color = car_color.toString();//车牌颜色
//                System.out.println(ChePaiResult);
                }
            }
            qrHandler.sendEmptyMessage(60);//通过handler跳出线程

        }).start();
    }

因为车牌识别需要耗时,所以为了防止代码耗时过长,需要将其放在线程中执行,完成识别后,及时跳出线程,防止在线程卡死。

2.1 Plate_color  方法的代码

 /**
     * 返回车牌的颜色
     * @param Chepai_type
     * @return
     */
    public String Plate_color(int Chepai_type){
        String Plate_Color="";
        if (Chepai_type==0){
            Plate_Color="蓝牌";
        }
        if (Chepai_type==1){
            Plate_Color="黄牌单层";
        }
        if (Chepai_type==2){
            Plate_Color="白牌单层";
        }
        if (Chepai_type==3){
            Plate_Color="绿牌新能源";
        }
        if (Chepai_type==4){
            Plate_Color="黑牌港澳";
        }
        if (Chepai_type==5){
            Plate_Color="香港单层";
        }
        if (Chepai_type==6){
            Plate_Color="香港双层";
        }
        if (Chepai_type==7){
            Plate_Color="澳门单层";
        }
        if (Chepai_type==8){
            Plate_Color="澳门双层";
        }
        if (Chepai_type==9){
            Plate_Color="黄牌双层";
        }
        if (Chepai_type==-1){
            Plate_Color="未知车牌";
        }
        return Plate_Color;
    }

如果对您有帮助,请点个赞。 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值