算法测试流程脚本工具站

一、录入sql和批量上传minIo图片,

录入sql(掠过)...,

一个上传,一个下载,只需上传,找到

def upload():
    # NOTE:Step:3 把拉下来的图片传上去给XXX服务器的minio
    up_data_minio("test", image_Urls_path='res')

修改image_Urls_path,为批量上传图片目录位置。 

找到

# 上传图片到minio    
def up_data_minio(bucket: str, image_Urls_path='imageUrlFromminIO'):
    # TODO:minio_conf唯一要修改的地方!
    minio_conf = {
    'endpoint': '10.168.1.96:9000',
    # 'endpoint': '172.20.0.67:9000',
    'access_key': 'minioadmin',
    # 'access_key': 'root',
    'secret_key': 'minioadmin',
    # 'secret_key': 'Lidar4d@#321',
    'secure': False
}

修改minio_conf为需要上传到指定minIO的绑定信息。 

import minio
import pymysql
import openpyxl
import os 

def get_data_from_mysql():
    # 连接数据库-
    conn = pymysql.connect(host="10.168.1.94", user="root", passwd="root", db="RemotePatrolDB", port=3369, charset="utf8")
    cur = conn.cursor()  # 创建游标对象

    # 查询表中数据
    cur.execute("SELECT * FROM CorrectPoint_fushun;")
    df = cur.fetchall()  # 获取所有数据

    imageUrls = []
    for data in df:
        imageUrls.append(data[15])

    cur.close()
    conn.close()
    return imageUrls

def save_for_excel(df):
    wb = openpyxl.Workbook()
    ws = wb.active
    for row in df:
        ws.append(row)
    wb.save("文件名.xlsx")


# 从minio上面拉取图片
def load_data_minio(bucket: str, imageUrls):
    minio_conf = {
    'endpoint': '10.168.1.96:9000',
    'access_key': 'minioadmin',
    'secret_key': 'minioadmin',
    'secure': False
}
    client = minio.Minio(**minio_conf)
    if not client.bucket_exists(bucket):
        return None
    
    root_path = os.path.join("imageUrlFromminIO") 
    for imageUrl in imageUrls:
        imageUrl = imageUrl.split('/')[-1]
        data = client.get_object(bucket, imageUrl)
        save_path = os.path.join(root_path, imageUrl)  
        with open(save_path, 'wb') as file_data:
            for d in data.stream(32 * 1024):
                file_data.write(d)
    return data.data

# 上传图片到minio    
def up_data_minio(bucket: str, image_Urls_path='imageUrlFromminIO'):
    # TODO:minio_conf唯一要修改的地方!
    minio_conf = {
    'endpoint': '10.168.1.96:9000',
    # 'endpoint': '172.20.0.67:9000',
    'access_key': 'minioadmin',
    # 'access_key': 'root',
    'secret_key': 'minioadmin',
    # 'secret_key': 'Lidar4d@#321',
    'secure': False
}
    for im_name in os.listdir(image_Urls_path):
        client = minio.Minio(**minio_conf)
        print(im_name, "load sucessed!")
        '''
        client.fput_object('mybucket', 'myobject.jpg', '/path/to/myobject.jpg', content_type='image/jpeg')
        '''
        client.fput_object(bucket_name=bucket, object_name=im_name,
                        file_path=os.path.join(image_Urls_path, im_name),
                        content_type='image/jpeg'
                        )        

def download():
    # NOTE:Step:1 拉取数据库信息
    imageUrls = get_data_from_mysql()
    print(imageUrls)
    # NOTE:Step:2 把图片从96的minio上面拉下来
    print(type(load_data_minio("test", imageUrls)))

def upload():
    # NOTE:Step:3 把拉下来的图片传上去给XXX服务器的minio
    up_data_minio("test", image_Urls_path='res')

if __name__ == "__main__":
    # 子良使用
    # download()
    # 豪哥使用
    upload()
    '''
    用于批量修改数据库ImagePath字段信息,替换为自己的ip。
    ---
    UPDATE CorrectPoint SET ImagePath=REPLACE(ImagePath, '192.168.120.188', '10.168.1.96');
    UPDATE CorrectPoint SET ImagePath=REPLACE(ImagePath, '10.168.1.96', '192.168.120.188');
    UPDATE CorrectPoint_lanjiang SET ImagePath=(REPLACE(ImagePath,"/intelligentremotepatrol/obj/","/test/"));
    '''    

    

二、自动分区指针、数显、油面、状态数据

 刚拿到数据的时候,数据目录是这样的:

算法测试流程脚本工具站_第1张图片

可以看到,里面有数显、也有指针类表计,当然还有更多的没有展示出来:油面表和状态类。

这样就很痛苦,因为每个类别对应的算法不同,想要批量测试,必须将他们分区,所以我们可以运行下面的代码:

1. 连接数据库。

2.找到数据库中对应点位的算法类别标签。

3.根据标签将每一个数据分到指定分区。

import minio
import pymysql
import openpyxl
import os 
import shutil

def get_data_from_mysql():
    # 连接数据库-
    conn = pymysql.connect(host="10.168.1.94", user="root", passwd="root", db="RemotePatrolDB", port=3369, charset="utf8")
    cur = conn.cursor()  # 创建游标对象

    # 查询表中数据
    cur.execute("SELECT * FROM CorrectPoint_fushun;")
    df = cur.fetchall()  # 获取所有数据
    
    imageUrls = {}
    for data in df:
        imageUrls[data[1]] = data[5]

    cur.close()
    conn.close()
    return imageUrls

if __name__ == "__main__":
    img_list = os.listdir('./')
    id_list = [temp.split('.')[0].split('_')[-1] for temp in img_list]

    meter_type = get_data_from_mysql()
    is_null_ids = []
    is_v5 = []
    is_paddleocr = []
    is_ywj = []

    if not os.path.exists('meter_ywj'):
        os.makedirs('meter_ywj')
    if not os.path.exists('meter_v5'):
        os.makedirs('meter_v5')
    if not os.path.exists('paddleocr'):
        os.makedirs('paddleocr')
    if not os.path.exists('zt_shibie'):
        os.makedirs('zt_shibie')   

    for ind, i in enumerate(id_list):
        if i == 'not':
            continue
        if i not in meter_type:
            is_null_ids.append(i)
            continue

        if meter_type[i] == 'meter_v5':
            shutil.move(img_list[ind], 'meter_v5/' + img_list[ind])
        elif meter_type[i] == 'paddleocr':
            shutil.move(img_list[ind], 'paddleocr/' + img_list[ind])
        elif meter_type[i] == 'meter_ywj':
            shutil.move(img_list[ind], 'meter_ywj/' + img_list[ind])

    print("未标定的点位:", is_null_ids)

结果如下:

算法测试流程脚本工具站_第2张图片

三、自动筛选出未识别出的点位,并且放到一个单独的分区,可以逐个测试,找到每一个测试失败的原因

import os 
import shutil
def find(dir_path):
    ori_data = set(os.listdir(dir_path))
    res_data = set(os.listdir(dir_path + '/' + 'res'))
    results = []
    for ori in ori_data:
        if ori == 'res':
            continue
        ori_id = ori.split('_')[0] + '.jpg'
        if not ori_id in res_data and not ori in res_data:
            results.append(ori)
            # shutil.move(os.path.join(dir_path, ori), ori)
            # shutil.copyfile(os.path.join(dir_path, ori), ori)
    print(results)
    print("len(results):", len(results))
if __name__ == "__main__":
    find('lanjiang_meter1226')

四、 找到数据库中录入失败的点位

import minio
import pymysql
import openpyxl
import os 
import shutil

def get_column_from_mysql():
    # 连接到MySQL数据库
    connection = pymysql.connect(
        host="10.168.1.94",
        user="root",
        password="root",
        database="RemotePatrolDB",
        port=3369,
        charset="utf8",
        cursorclass=pymysql.cursors.DictCursor
    )

    try:
        # 创建游标对象
        with connection.cursor() as cursor:
            # 执行查询表结构的SQL语句
            table_name = 'CorrectPoint_lanjiang'
            query = f"DESCRIBE {table_name}"
            cursor.execute(query)

            # 获取查询结果
            result = cursor.fetchall()

            # 打印表的所有字段
            for i,row in enumerate(result):
                print(i, row['Field'])

    finally:
        # 关闭数据库连接
        connection.close()

def get_data_from_mysql():
    get_column_from_mysql()
    # 连接数据库-
    conn = pymysql.connect(
        host="10.168.1.94",
        user="root",
        password="root",
        database="RemotePatrolDB",
        port=3369,
        charset="utf8",
        cursorclass=pymysql.cursors.DictCursor
    )
    cur = conn.cursor()  # 创建游标对象

    # 查询表中数据
    cur.execute("SELECT * FROM CorrectPoint_lanjiang;")
    df = cur.fetchall()  # 获取所有数据
    
    imageUrls = []
    ids = []
    for data in df:
        ids.append(data['PointPositionId'])
        if len(data['ImagePath']) > 0:
            continue
        imageUrls.append(data['PointPositionId'])

    cur.close()
    conn.close()
    return ids, imageUrls

def find_notLoad_id(ids, image_paths='lanjiang_meter1226'):
    img_list = os.listdir(image_paths)
    results = []
    for im in img_list:
        if im == 'res':
            continue
        id = im.split('_')[0]
        if not id in ids:
            results.append(im)

    return results
if __name__ == "__main__":
    ids, imageUrls = get_data_from_mysql()
    print('***************************')
    print("【警告】minIO为空的图片:")
    print('***************************')
    print(imageUrls)
    print("len(imageUrls):", len(imageUrls))
    
    print('***************************')
    print("【警告】未录入点位的图片:")
    print('***************************')
    ids_error = find_notLoad_id(ids, image_paths='lanjiang_meter1226')
    print(ids_error)
    print("len(ids_error):", len(ids_error))
    

0 Id
1 PointPositionId
2 Position
3 MinValue
4 MaxValue
5 AlgorithmType
6 CreatorId
7 CreatorName
8 CreatorTime
9 UpdateId
10 UpdateName
11 UpdateTime
12 IsDelete
13 ImagePath
14 FrameValue
15 MarkType
16 Type
17 RegionCoordinate
18 RowNum
19 ColumnNum
20 Time
21 Tags
***************************
【警告】minIO为空的图片:
***************************
['3a0ce56d-2746-2f58-46f2-aa56f24b2324', '3a0ce56d-2746-4ca1-cb92-9a8446883521', '3a0ce56d-2746-36c7-2b65-24159b4bcab8', '3a0ce56d-2746-c90c-dac5-47fca3e28ee5', '3a0ce56d-2747-9700-e48c-b771397bb369', '3a0d7153-5342-1877-54e7-98a79fe1a23f', '3a0d7153-5343-5750-300f-3d379c106df2', '3a0d7153-5343-6063-9c42-a9ca6af7c961', '3a0d7153-5344-6f60-3753-15e9f6d2f35b', '3a0d7153-5343-f060-b02f-6f15924d27d4', '3a0d7153-5344-babb-fafd-71e4a7148114', '3a0d7153-5344-d702-763e-1800629853f3', '3a0d7153-5344-46fb-bc2f-0ce786508e4b', '3a0d7153-5344-bde3-31c8-f421afb3ad6b', '3a0d7153-5344-1f4c-de63-97fbdf9c33fb', '3a0d7153-5344-c48a-c61a-6d5ed9180d9d', '3a0d7153-5344-d35a-0482-25a5cc66e46f', '3a0d7153-5344-e983-3246-9ca182933208', '3a0d7153-5344-d41a-51ff-1609dbb9af79', '3a0d7153-5344-c173-c0ef-59e0eb3b24aa', '3a0ee406-d07b-9c19-9270-32c2f02befa8', '3a0ee406-d07c-021f-97ad-652b00de6102', '3a0ee406-d07c-0247-7c15-057b9407fb0e', '3a0ee406-d07c-27a4-876f-6dac0d737f68', '3a0ee406-d07d-4b54-6931-072ac4cf7538', '3a0ee406-d07f-6421-43c7-77f6c8d8ff1f', '3a0f0427-d532-0530-134f-a8eb01640ec8', '3a0f0427-d533-254f-6a87-b4eb500c4581', '3a0f0427-d533-8b2e-2279-a6f38f592545', '3a0f0427-d532-a738-89a6-af4af7328446', '3a0f02fd-a129-cde9-6e89-58662a3c6cf4', '3a0f0427-d536-1f1f-0ad7-14fc9a6c0094', '3a0f0427-d536-4b05-6640-791df6aa7c3b', '3a0f64db-4e12-af0a-5fa8-65100a5fddd9', '3a0f06ed-daa4-99e2-e3fa-b925ba024921']
len(imageUrls): 35
***************************
【警告】未录入点位的图片:
***************************
['3a0efe65-3f13-42a3-6098-aebbc07e9a88_3a0fb216-76d7-3764-295b-dc7093a55ef6_20231225590349.jpg', '3a0efe65-3f14-5f10-d5c0-ba72d79b6893_3a0fb216-76d8-7a46-7b6c-58821c0595b2_20231225060447.jpg', '3a0efe65-3f19-678d-edf4-a804c300a51a_3a0fb216-76d7-f405-57fa-fb0999b37238_20231225070450.jpg', '3a0f0211-b2d8-61e5-5533-764e2ead9f2c_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225040411.jpg', '3a0f0211-b2d8-648a-15cb-6465c1d4cb91_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225040446.jpg', '3a0f0211-b2d8-7ff2-afbb-ac10399d0e54_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225040423.jpg', '3a0f0211-b2d8-9184-80fc-a62f23fe5975_3a0fb216-76db-8134-20c1-1f3960819ff3_20231225060411.jpg', '3a0f0211-b2d8-af28-3ef8-4a17141059b4_3a0fb216-76db-8134-20c1-1f3960819ff3_20231225050426.jpg', '3a0f0211-b2d8-bcf1-f581-d7b774248d92_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225040400.jpg', '3a0f0211-b2d8-bf27-af5d-f17e7a1bcdd7_3a0fb216-76db-8134-20c1-1f3960819ff3_20231225060400.jpg', '3a0f0211-b2d8-e2af-32d8-2c049edea555_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225030447.jpg', '3a0f0211-b2d8-f5d4-4959-8bcad63ca3ea_3a0fb216-76d5-a2e8-4992-62c198d56478_20231225040434.jpg', '3a0f0211-b2da-0781-6d31-b4cdb8b9df02_3a0fb216-76d5-40e9-8f4d-ef8d9dedeb45_20231225000449.jpg', '3a0f0211-b2db-1967-de35-079f3765b631_3a0fb216-76db-5277-bfbd-b6583952ce68_20231225060423.jpg', '3a0f0211-b2db-2dcd-585a-2abad0c31b1b_3a0fb216-76db-e24d-d80b-02206c47655c_20231225590326.jpg', '3a0f0211-b2db-3a64-4a09-ad834ff42571_3a0fb216-76db-e24d-d80b-02206c47655c_20231225580352.jpg', '3a0f0211-b2db-4377-69ba-557d58642223_3a0fb216-76db-e24d-d80b-02206c47655c_20231225590338.jpg', '3a0f0211-b2db-60f0-c6ac-c796bbb144fe_3a0fb216-76db-e24d-d80b-02206c47655c_20231225590315.jpg', '3a0f0211-b2db-81a5-446b-4a98683da222_3a0fb216-76db-e24d-d80b-02206c47655c_20231225590303.jpg', '3a0f0427-d52d-a45c-cdb4-1a2010190084_3a0fb216-76d7-e192-15be-5e7718b8eced_20231225070445.jpg', '3a0f06ed-daa4-3209-c85d-438478893957_3a0fb216-76da-c262-5fc3-d091cd39c381_20231225590304.jpg', '3a0f06ed-daa4-47b4-7d04-5afb9db6f351_3a0fb216-76d4-5546-c271-517f7f4bd2b9_20231225090428.jpg', '3a0f06ed-daa4-e789-2cb1-be0df84590af_3a0fb216-76d4-5546-c271-517f7f4bd2b9_20231225090439.jpg', '3a0f0716-eedd-0665-6153-2bfd4752bd5f_3a0fb216-76d5-c63c-f2e5-85d5a4ba55c3_20231225100418.jpg', '3a0f0716-eedd-8084-fb19-05aeb9e9703f_3a0fb216-76d5-c63c-f2e5-85d5a4ba55c3_20231225100406.jpg', '3a0f0716-eedd-9599-b03f-7abc46a0f550_3a0fb216-76d5-c63c-f2e5-85d5a4ba55c3_20231225090442.jpg', '3a0f0716-eedd-ac1a-d551-5c56abdef0a4_3a0fb216-76d5-c63c-f2e5-85d5a4ba55c3_20231225090455.jpg', '3a0f0716-eedd-ade1-670b-64dc55474505_3a0fb216-76d5-c63c-f2e5-85d5a4ba55c3_20231225090418.jpg', '3a0f5a44-a13a-17ee-980f-3915ddf9bbbb_3a0fb216-76d0-a4d5-9563-58bb7e7e5792_20231225080429.jpg', '3a0f5a44-a13b-0a71-398f-f8a8ff4eea9f_3a0fb216-76cd-dfbb-4281-0d3ebc3fc6e8_20231225050450.jpg', '3a0f5a44-a13b-1215-c2ad-955100c6d158_3a0fb216-76d7-e192-15be-5e7718b8eced_20231225090428.jpg', '3a0f5a44-a13b-24c4-f5a3-744a21e7f7b6_3a0fb216-76d9-0ed1-b5ae-0165bd60b3d4_20231225090448.jpg', '3a0f5a44-a13b-34ca-f87d-c7d429e110c9_3a0fb216-76d9-149d-6b9e-9aeca820cc2d_20231225080414.jpg', '3a0f5a44-a13b-3ae8-8cad-b1e69b2614b1_3a0fb216-76d9-349f-ca2a-72cd65115f4b_20231225080441.jpg', '3a0f5a44-a13b-3ba0-1c5a-cce36dfbc102_3a0fb216-76d9-149d-6b9e-9aeca820cc2d_20231225080403.jpg', '3a0f5a44-a13b-4e81-43ee-34cd314c64eb_3a0fb216-76cd-e824-740f-4606943d467d_20231225090428.jpg', '3a0f5a44-a13b-512f-8108-341614c4ed3e_3a0fb216-76cd-aa8b-4c95-f02ac94b54d8_20231225050403.jpg', '3a0f5a44-a13b-6d85-d787-9fd616ece5a5_3a0fb216-76d9-9c4e-1fce-6ea5caeae160_20231225080423.jpg', '3a0f5a44-a13b-7131-c9d1-c97292fdc1b8_3a0fb216-76cd-aa8b-4c95-f02ac94b54d8_20231225040452.jpg', '3a0f5a44-a13b-8680-b129-83f98a812630_3a0fb216-76cd-2c11-2c21-e64fe4d1ccec_20231225090407.jpg', '3a0f5a44-a13b-9c22-0cdb-1ef88fbd354b_3a0fb216-76cd-381f-4bee-fe16451c5bf6_20231225090451.jpg', '3a0f5a44-a13b-a8e6-03b3-d3c88e3292c7_3a0fb216-76ce-4ed2-2287-6542e89f5eb4_20231225030427.jpg', '3a0f5a44-a13b-b050-6a53-095e5bb3b392_3a0fb216-76d7-e192-15be-5e7718b8eced_20231225080443.jpg', '3a0f5a44-a13b-bc14-31d1-3edcbf856018_3a0fb216-76cd-8c02-86e9-dd0c5b430b87_20231225080446.jpg', '3a0f5a44-a13b-bc5a-7e9c-2932fe3bb57f_3a0fb216-76d9-349f-ca2a-72cd65115f4b_20231225080452.jpg', '3a0f5a44-a13b-c68e-1038-d6e6800716d0_3a0fb216-76cd-2c11-2c21-e64fe4d1ccec_20231225080455.jpg', '3a0f5a44-a13b-e2f6-5670-bbda4f0f72eb_3a0fb216-76d7-e192-15be-5e7718b8eced_20231225080408.jpg', '3a0f5a44-a13b-e6ff-8941-9fa869a6ed53_3a0fb216-76cd-e650-cbdc-939260d52add_20231225090412.jpg', '3a0f5a44-a13b-ede6-8763-6fe52ced2337_3a0fb216-76d9-9c4e-1fce-6ea5caeae160_20231225080434.jpg', '3a0f5abf-3643-4933-e894-84e2f91dc390_3a0fb216-76d1-19fe-948f-3e929b4f7cd6_20231225080443.jpg', '3a0f5abf-3643-6006-797f-b4aa26fe9a24_3a0fb216-76d2-2625-f8b5-4ccbfcac02dc_20231225080434.jpg']
len(ids_error): 51

你可能感兴趣的:(projects算法工程师,算法,人工智能)