算法测试流程脚本工具站

🍉一、录入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. 连接数据库。

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)

结果如下:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/275497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用CHAT写环保为主题的校园实践活动报告

问CHAT:写一篇以环保为主题的校园实践活动报告 CHAT回复:尊敬的老师,亲爱的同学们: 大家好,今天我很荣幸地向大家分享一下,最近我们团队在学校里所组织的环保主题实践活动。 环保是一件至关重要的事情&am…

web自动化(4)——POM设计重构

1. 什么是POM Page Object Model 是ui自动化测试中常见的封装方式。 原理:将页面封装为PO对象,然后通过面向对象的方式实现UI自动化 2. 封装原则 PO无需包含全部UI元素PO应当验证元素PO不应该包含断言PO不应该暴露元素 3. 怎么进行POM封装 面向对象…

Leetcode 763 划分字母区间

题意理解: 要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 输入&#xff…

大数据与人工智能|信息技术产业架构、行业发展与前沿技术(第2节)

内容链接:信息技术产业架构、行业发展与前沿技术(大数据与人工智能系列课程 第2节) 声明:学习使用,侵权必删! 主要内容:1. 从算盘到量子计算机,介绍了半导体行业的发展历程和技术原…

二分查找——OJ题(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二分查找1、题目讲解2、算法原理3、代码实现 二、在排序数组中查找元素的第一个和最后一个…

【本地缓存篇】如何实现本地缓存?

如何实现本地缓存? ✔️典型解析✔️数据结构✔️线程安全✔️对象上限✔️清除策略✔️过期时间 ✔️扩展知识仓基于Caffeine实现本地缓存 ✔️典型解析 所谓本地缓存,就是和应用服务器在一起的缓存工具,将需要缓存的数据放到本地缓存中,可…

【轻松入门】OpenCV4.8 + QT5.x开发环境搭建

引言 大家好,今天给大家分享一下最新版本OpenCV4.8 QT5 如何一起配置,完成环境搭建的。 下载OpenCV4.8并解压缩 软件版本支持 CMake3.13 或者以上版本 https://cmake.org/ VS2017专业版或者以上版本 QT5.15.2 OpenCV4.8源码包 https://github.com/op…

常用的 linux 命令

常用的 linux 命令 1.从其他机器拷贝文件夹2.查看哪个程序在用特定端口3.实时监控日志文件内容4.查看指定用户拥有的进程5.查看磁盘空间使用情况6.文件搜索which(whereis) 显示系统命令所在目录find 查找任何文件或目录1) 根据文件名称查找2)…

【Linux驱动】Linux中断(一)—— 设备树中断节点

裸机使用中断需要通过寄存器手动配置,但有了 Linux 系统后,Linux内核提供了完善的中断框架,我们只需要申请中断,然后注册中断服务函数即可。 一、设备树中断属性 既然驱动中要注册中断服务函数,我们首先需要知道三个点…

实战 | 使用OpenCV快速去除文档中的表格线条(步骤 + 源码)

导 读 本文主要介绍如何使用OpenCV快速去除文档中的表格线条,并给详细步骤和代码。 背景介绍 测试图如下,目标是去除下面三张图中的表格线条,方便后续图像处理。 实现步骤 下面演示详细步骤,以图1为例: 【1】获取二值图像:加载图像、转为灰度图、OTSU二值化 i…

记录 | ubuntu源码编译python3.7.3(指定版本)

一、安装依赖包 sudo apt-get install -y make build-essential libssl-dev zlib1g-dev sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm sudo apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev 二、从Python网…

mapboxgl 中给地图添加遮罩蒙版,并不遮罩其中一块区域

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章主要是给一整块地图添加遮罩层蒙版,但是不遮罩其中一个区域,以反向高亮地区内容。 效果预览 技术思路 这里要实现某个区域反显高亮,需要这个区域的边界json文件,与ech…

Flink1.17实战教程(第三篇:时间和窗口)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

华锐三维云展平台创建VR文化宣传展厅,让文化传承变得更便捷和高效

随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进人们的生活。通过华锐云展平台,可以通过拖、拉、拽,快速自由地创建一个VR文化宣传展厅,VR文化宣传展厅为人们提供了一个全新的、沉浸式的文化体验空间。在…

uniapp的分包使用记录

UniApp的分包是一种将应用代码划分为多个包的技术。分包的核心思想是将不同部分的代码划分为不同的包,按需加载,从而提高应用性能。使用UniApp的条件编译功能,开发人员可以根据需要将代码划分为多个包。每个包都包含一组页面和组件&#xff0…

在国内如何在Tiktok上买东西(在tiktok上付款)??

TikTok是一款由中国公司字节跳动(ByteDance)开发的社交媒体应用,于2016年9月正式上线。它在全球范围内迅速走红,特别受到年轻用户的喜爱。以下是关于TikTok的介绍以及其一些优势 支持的卡头有5561、531993 //点我办卡&#xff0c…

stm32H743编译器关于浮点类型强制转换传参的bug

局部函数,正常传参 当测试函数作为局部函数和main函数写在同一个文件中时,参数可以正常传递。函数参数和形参都为3.14 float value 0.0; void float_test(float _v) {value _v; }int main(void) {float_test(3.14f);while(1); } keil仿真截图&#…

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试,收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁? 行锁有哪些? 性能优化 分库分表…

Java生态系统的进化:从JDK 1.0到今天

目录 前言 JDK 1.0:开启Java时代 JDK 1.1:Swing和内部类 JDK 1.2:Collections框架和JIT编译器 JDK 1.5:引入泛型和枚举 JDK 1.8:Lambda表达式和流 JDK 11以后:模块化和新特性 未来展望 总结 作者简…

3D换肤在服装行业的应用

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 通过采用高质量的 3D 模型,企业可以提供更加身临其境的体…