【阿里云高校计划】未完成(车牌识别)停车场车辆管理系统 day5 【以小见大】
【阿里云高校计划】未完成(车牌识别)停车场车辆管理系统 day5 【以小见大】
由于前些天学校还有特别多的课程,所以这次训练营的任务推到了现在。
之前也花过一下午的时间去看,看阿里云视觉智能开放平台的说明文档,看OSS的文档等等。可惜学渣的我当时没有看懂。
可能由于自身专业知识和技能的匮乏,比如js和jsp都没有掌握,比如oss听都没听到过。
于是今天又花费了一晚上的时间捣鼓,终于,我实现了其中oss和车牌识别的功能(并不是项目全部)。
实施前——项目实现思路
1.简要描述
在许多小区和商场的停车场都设有无人进出口管理系统,通过摄像头进行识别,对进出口的车辆进行判断和记录。从而达到抬杆、计时、收费、场内车辆数量的管理。
2.功能思路
简单思路如下:
- 进场显示:剩余车位/总车位;
- 进场识别:车牌;
- 进场记录:车牌号、进入时间、总车辆数量;
- 出场识别:车牌;
- 出场记录:车牌号、出场时间、总车辆数量;
- 出场显示:应缴费数额。
3.设计思路
当前设计思路如下:
- 根据实时记录未出场车辆数量和停车场总车位之比显示剩余车位/总车位;
- 由于这里硬件缺失,我只将车辆正面照片上传至OSS,通过OSS再调用阿里云智能开放平台中文字识别的车牌识别API,从而获取车辆信息;
- 根据车辆信息中的可信度进行筛选,如果不符合设定的阈值,则显示识别失败,并再次提示上传并识别,直至成功;
- 将需要的识别结果进行记录,上传到后台数据库;
- 出场时同理,只是将相同车牌号的车辆的出入场时间进行差值运算获得停车总时间,再进行设定好的收费计算规则进行计算,将得到的应收费数额并显示出来。
- 这次并不涉及收费接口,所以到上一步系统截止。
项目实施——设计步骤
一、OSS的实现
对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务。
在我看来,oss就是一个类似远端硬盘的一个东西,只不过它可以提供给我们一个URL,具有平台无关性和安全可靠的服务。
1.新建spring项目
2.在maven中导入所需依赖
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
这个maven也是在本次训练营第一次接触,初步感觉是像一个类似js里一个CDN的东西。
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
3.Upload利用oss上传图片的类
package com.example.demo;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.util.Date;
import java.lang.*;
import java.util.Scanner;
public class UploadPic {
public static String UploadPic(){
// Endpoint以上海为例,其它Region请按实际情况填写。
String endpoint = "oss-cn-shanghai.aliyuncs.com";
// 阿里云主账号AccessKey。
String accessKeyId = "*******************";
String accessKeySecret = "*******************";
//本地文件名
System.out.println("请输入本地图片path:");
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
String bucketName = "number-plates";
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 生成上传文件名
String objectName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上传文件。
ossClient.putObject(bucketName, objectName, new File(fileName));
// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
// 关闭OSSClient。
ossClient.shutdown();
return url.toString();
}
}
二、车牌识别的实现
1.在maven中导入所需依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr -->
<!-- 内容识别对应依赖 -->
<!-- https://mvnrepository.com/artifact/com.aliyun/objectdet -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>objectdet</artifactId>
<version>0.0.5</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.8</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ecs</artifactId>
<version>4.17.6</version>
</dependency>
<!-- 图片识别 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ocr</artifactId>
<version>1.0.7</version>
</dependency>
2.RecognizeLicensePlate根据URL进行车牌识别
package com.example.demo;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.ocr.model.v20191230.RecognizeLicensePlateRequest;
import com.aliyuncs.ocr.model.v20191230.RecognizeLicensePlateResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
public class RecognizeLicensePlate {
public RecognizeLicensePlate() {
{
String accessKeyId = "*********************";
String accessKeySecret = "*********************";
String PicURL = UploadPic.UploadPic();
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
RecognizeLicensePlateRequest request = new RecognizeLicensePlateRequest();
request.setRegionId("cn-shanghai");
request.setImageURL(PicURL);
try {
RecognizeLicensePlateResponse response = client.getAcsResponse(request);
System.out.println(response.getData().getPlates());
System.out.println("------------------------------------------------------------------");
String result = new Gson().toJson(response);
System.out.println(result);
System.out.println(new Gson().toJson(response.getData().getPlates()));
System.out.println("------------------------------------------------------------------");
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
System.out.println(PicURL);
}
}
}
}
3.结果展示
识别正确
emmm,目前的话就只做到了这里,希望接下来我可以利用上个星期学的Vue来进行前端的搭建,同时也实现时间、订单的数据库储存。
加入高校计划
本人是参加的达摩院特别版-视觉AI训练营第二期
训练营里面的小哥哥小姐姐说话超级好听,也有超多大佬,我超喜欢这里!