汽車檢測
開通服務
先要開通汽車檢測服務
導入依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>objectdet</artifactId>
<version>0.0.5</version>
</dependency>
<!-- 圖片識別 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
實現
service
@Service
public class CarService {
@Value("${car.accessKeyId}")
private String accessKeyId;
@Value("${car.accessKeySecret}")
private String accessKeySecret;
private Client objectClient;
private RuntimeObject runtimeObject;
@PostConstruct
public void initClient() throws Exception {
Config objectConfig = new Config();
objectConfig.type = "access_key";
objectConfig.regionId = "cn-shanghai";
objectConfig.accessKeyId = accessKeyId;
objectConfig.accessKeySecret = accessKeySecret;
objectConfig.endpoint = "objectdet.cn-shanghai.aliyuncs.com";
objectClient = new Client(objectConfig);
runtimeObject = new RuntimeObject();
}
//識別分類圖片還未完成
public String classifyVehicle(String filePath) throws Exception {
ClassifyVehicleInsuranceAdvanceRequest request = new ClassifyVehicleInsuranceAdvanceRequest();
request.imageURLObject = new FileInputStream(filePath);
ClassifyVehicleInsuranceResponse response = objectClient.classifyVehicleInsuranceAdvance(request, runtimeObject);
String result = null;
for (ClassifyVehicleInsuranceResponse.ClassifyVehicleInsuranceResponseDataLabels item : response.data.labels){
System.out.println(item.name + item.score);
}
return null;
}
public String myDetectVehicle(String filePath)throws Exception{
DetectVehicleAdvanceRequest request = new DetectVehicleAdvanceRequest();
request.imageURLObject = new FileInputStream(filePath);
DetectVehicleResponse response = objectClient.detectVehicleAdvance(request, runtimeObject);
String result = null;
for (DetectVehicleResponse.DetectVehicleResponseDataDetectObjectInfoList item : response.data.detectObjectInfoList){
System.out.println(item.type);
System.out.println(item.score);
if ("vehicle".equals(item.type)){
System.out.println("檢測成功!是機動車");
}else {
System.out.println("該圖片不是機動車");
}
result = item.type;
}
return result;
}
//車輛損傷識別
public String myRecognizeVehicle(String filePath) throws Exception{
//本地上傳圖片
RecognizeVehicleDamageAdvanceRequest request = new RecognizeVehicleDamageAdvanceRequest();
request.imageURLObject = new FileInputStream(filePath);
//識別車輛損傷
RecognizeVehicleDamageResponse response = objectClient.recognizeVehicleDamageAdvance(request, runtimeObject);
return getHurtResult(response.data.elements);
}
public String getHurtResult(RecognizeVehicleDamageResponse.RecognizeVehicleDamageResponseDataElements[] items){
StringBuffer type = new StringBuffer("檢測到的車輛損傷為:");
for (RecognizeVehicleDamageResponse.RecognizeVehicleDamageResponseDataElements item: items){
switch (item.type) {
case "1": type.append("輕微刮擦 ");
break;
case "2": type.append("重度刮擦 ");
break;
case "3": type.append("輕度變形 ");
break;
case "4": type.append("中度變形 ");
break;
case "5": type.append("重度變形 ");
break;
case "6": type.append("crack破損孔洞 ");
break;
case "7": type.append("翼子板和大燈縫隙 ");
break;
case "8": type.append("翼子板保險槓縫隙 ");
break;
case "9": type.append("大燈輕微刮擦 ");
break;
case "10": type.append("大燈重度刮擦 ");
break;
case "11": type.append("大燈破損 ");
break;
case "12": type.append("後視鏡輕微刮擦 ");
break;
case "13": type.append("後視鏡玻璃破損 ");
break;
case "14": type.append("後視鏡脫落 ");
break;
case "15": type.append("擋風玻璃破損 ");
break;
}
}
return type.toString();
}
public String fileUpload(MultipartFile file){
//獲取文件名
String uploadFileName = file.getOriginalFilename();
//上傳路徑保存設置 UUID
String path = "src/main/resources/static/upload";
//如果路徑不存在,創建一個
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//上傳文件,並保存
InputStream is = null;
OutputStream os = null;
try {
is = file.getInputStream();
os = new FileOutputStream(new File(realPath,uploadFileName));
int len = 0;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1){
os.write(buffer,0,len);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return path +"\\"+uploadFileName;
}
}
controller
@Controller
public class CarController {
@Autowired
private CarService carService;
@RequestMapping("/upload")
public String fileUpload(@RequestParam("carfile")MultipartFile carfile,
Model model)throws Exception{
System.out.println("22222");
//上傳受損車輛
String carPath = carService.fileUpload(carfile);
//調用Service層分析圖片
String carStr = null;
String carStr2 = null;
//機動車檢測
carStr = carService.myDetectVehicle(carPath);
//車輛損傷識別
carStr2 = carService.myRecognizeVehicle(carPath);
//保存數據到數據庫中
//將圖片路徑放入Model中
String carFileName = carfile.getOriginalFilename();
model.addAttribute("carfilename","/upload/"+carFileName);
if ("vehicle".equals(carStr)){
model.addAttribute("carStr","檢測成功!是機動車");
}else {
model.addAttribute("carStr","您上傳的圖片不是機動車,請重新上傳!!");
}
model.addAttribute("carStr2",carStr2);
return "result";
}
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String toResult(){
return "test";
}
}
前端
test
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form th:action="@{/upload}" enctype="multipart/form-data" method="post">
受損車輛:<input type="file" name="carfile">
<input type="submit" value="upload">
</form>
</body>
</html>
result
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img th:src="${carfilename}">
<p th:text="${carStr}"></p>
<p th:text="${carStr2}"></p>
</body>
</html>