天天看點

Class 4 - 車輛保險應用 實施前準備工作具體實施

實施前準備工作

一、本地圖檔上傳為OSS

1.開通oss

Class 4 - 車輛保險應用 實施前準備工作具體實施

2.建立Bucket

Class 4 - 車輛保險應用 實施前準備工作具體實施
Class 4 - 車輛保險應用 實施前準備工作具體實施

二、開通目标檢測服務

三、檢視所需API

這裡我們用到阿裡雲視覺智能開放平台提供的三個功能:

  • 車輛部件識别
  • 車輛損傷識别
  • 車險圖檔分類

1.車輛部件識别

檢測圖檔中車輛部件的位置以及名稱。

2.車輛損傷識别

針對常見小汽車車型,識别車輛外觀受損部件及損傷類型,可識别數十種車輛部件、五大類外觀損傷。(刮擦、凹陷、開裂、褶皺、穿孔)

3.車險圖檔分類

對輸入的車險圖檔進行分類。

具體實施

一、本地圖檔上傳至OSS的upload.py

1.示例代碼

# -*- coding: utf-8 -*-

import os
import random
import string
import oss2


# 以下代碼展示了檔案上傳的進階用法,如斷點續傳、分片上傳等。
# 基本的檔案上傳如上傳普通檔案、追加檔案,請參見object_basic.py


# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等資訊。
# 通過環境變量擷取,或者把諸如“<你的AccessKeyId>”替換成真實的AccessKeyId等。
#
# 以杭州區域為例,Endpoint可以是:
#   http://oss-cn-hangzhou.aliyuncs.com
#   https://oss-cn-hangzhou.aliyuncs.com
# 分别以HTTP、HTTPS協定通路。
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '<你的AccessKeyId>')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '<你的AccessKeySecret>')
bucket_name = os.getenv('OSS_TEST_BUCKET', '<你的Bucket>')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '<你的通路域名>')


# 确認上面的參數都填寫正确了
for param in (access_key_id, access_key_secret, bucket_name, endpoint):
    assert '<' not in param, '請設定參數:' + param


# 建立Bucket對象,所有Object相關的接口都可以通過Bucket對象來進行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)


def random_string(n):
    return ''.join(random.choice(string.ascii_lowercase) for i in range(n))

# 生成一個本地檔案用于測試。檔案内容是bytes類型。
filename = random_string(32) + '.txt'
content = oss2.to_bytes(random_string(1024 * 1024))

with open(filename, 'wb') as fileobj:
    fileobj.write(content)


"""
斷點續傳上傳
"""

# 斷點續傳一:因為檔案比較小(小于oss2.defaults.multipart_threshold),
# 是以實際上用的是oss2.Bucket.put_object
oss2.resumable_upload(bucket, 'remote-normal.txt', filename)

# 斷點續傳二:為了展示的需要,我們指定multipart_threshold可選參數,確定使用分片上傳
oss2.resumable_upload(bucket, 'remote-multipart.txt', filename, multipart_threshold=100 * 1024)


"""
分片上傳
"""

# 也可以直接調用分片上傳接口。
# 首先可以用幫助函數設定分片大小,設我們期望的分片大小為128KB
total_size = os.path.getsize(filename)
part_size = oss2.determine_part_size(total_size, preferred_size=128 * 1024)

# 初始化分片上傳,得到Upload ID。接下來的接口都要用到這個Upload ID。
key = 'remote-multipart2.txt'
upload_id = bucket.init_multipart_upload(key).upload_id

# 逐個上傳分片
# 其中oss2.SizedFileAdapter()把fileobj轉換為一個新的檔案對象,新的檔案對象可讀的長度等于size_to_upload
with open(filename, 'rb') as fileobj:
    parts = []
    part_number = 1
    offset = 0
    while offset < total_size:
        size_to_upload = min(part_size, total_size - offset)
        result = bucket.upload_part(key, upload_id, part_number,
                                    oss2.SizedFileAdapter(fileobj, size_to_upload))
        parts.append(oss2.models.PartInfo(part_number, result.etag, size = size_to_upload, part_crc = result.crc))

        offset += size_to_upload
        part_number += 1

    # 完成分片上傳
    bucket.complete_multipart_upload(key, upload_id, parts)

# 驗證一下
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()


os.remove(filename)           

二、車輛部件識别

1.請求參數

ImageURL:圖檔URL

2.示例代碼

#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkobjectdet.request.v20191230.RecognizeVehiclePartsRequest import RecognizeVehiclePartsRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-shanghai')

request = RecognizeVehiclePartsRequest()
request.set_accept_format('json')

request.set_ImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/RecognizeVehicleParts.jpg")

response = client.do_action_with_exception(request)
# python2:  print(response) 
print(str(response, encoding='utf-8'))
           

三、車輛損壞識别類

#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkobjectdet.request.v20191230.RecognizeVehicleDamageRequest import RecognizeVehicleDamageRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-shanghai')

request = RecognizeVehicleDamageRequest()
request.set_accept_format('json')

request.set_ImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/%E8%BD%A6%E8%BE%86%E6%8D%9F%E4%BC%A4%E8%AF%86%E5%88%AB%20.jpg")

response = client.do_action_with_exception(request)
# python2:  print(response) 
print(str(response, encoding='utf-8'))           

四、車險圖檔分類

#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkobjectdet.request.v20191230.ClassifyVehicleInsuranceRequest import ClassifyVehicleInsuranceRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-shanghai')

request = ClassifyVehicleInsuranceRequest()
request.set_accept_format('json')

request.set_ImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/sanjiye-meizi/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/%E8%BD%A6%E9%99%A9%E5%9B%BE%E7%89%87.jpg")

response = client.do_action_with_exception(request)
# python2:  print(response) 
print(str(response, encoding='utf-8'))