Atitit data fmt sumup 常用的数据交换格式 标准 目录 1. 分类标准 2 1.1. 按照结构化与非结构化分类 2 1.2. 按照资料性质分类常见的数据格式txt ,do

本文总结了各种数据交换格式的特点及应用场合,包括通用格式如JSON、XML等,以及特定领域的专用格式,如VCF、CSV等。文章还探讨了不同格式之间的优缺点对比,并介绍了一些特殊的编码方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Atitit data fmt sumup 常用的数据交换格式    标准

 

 

目录

1. 分类标准 2

1.1. 按照结构化与非结构化分类 2

1.2. 按照资料性质分类常见的数据格式txt doc picmusic vodio 2

1.3. 通用与专用格式 2

1.4. 完全与受限 比如xmlini 2

1.5. 文本 vs 二进制 2

1.6. 工业标准vs私有标准 json vs  java php str 2

2. 通用格式json yaml toml xml Html 2

2.1. Serialize phpstr  javastr 2

2.2. 源码 and ast 2

2.3. 变量     将数据写成标准的PHP赋值语句存放在文本文件中,在程序执行过程中包含进来, 2

2.4. 非完全格式Urlparam Propini csv csvWzHead3 3

2.5. TLV(三元组编码):  T(标记/类型域)L(长度/大小域)V(值/内容域), 3

3. 专用格式 4

4. 专用格式.常用格式 4

4.1. Diary 格式 4

4.2. 财务记录excel 4

4.3. 用户信息vcf 通讯录导出的一种格式 4

4.4. 导入导出数据csv,excel格式 4

4.5. Browser ,fav data ,html format..eg 360se 4

4.6. Zip  rar 4

4.7. Music Lrc歌词  mid 4

5. 专用格式 . 其他 4

5.1.1. 邮件格式eml 4

5.1.2. Im 4

5.1.3. Doc docx 4

5.1.4. 翻译软件词条,haosyo 马个标准的..使用txt xml的有.. 4

5.1.5. 视频元数据 info 4

5.1.6. 输入法,词库格式 5

5.1.7. News  rss vs atom 5

5.1.8. Dev ,sql 5

5.1.9. 商品信息excel  ecshop标准 5

5.1.10. 地图,地理位置格式 5

5.1.11. 日历格式,excel格式,貌似没有标准格式 5

5.1.12. 天气软件格式 5

6. Ref 5

6.1. Atitit.常见软件 数据 交换格式 标准.docx 5

 

1. 分类标准

1.1. 按照结构化与非结构化分类  

1.2. 按照资料性质分类常见的数据格式txt doc picmusic vodio

1.3. 通用与专用格式

1.4. 完全与受限 比如xmlini

1.5. 文本 vs 二进制

1.6. 工业标准vs私有标准 json vs  java php str

2. 通用格式json yaml toml xml Html 

2.1. Serialize phpstr  javastr 

 

2.2. 源码 and ast

2.3. 变量     将数据写成标准的PHP赋值语句存放在文本文件中,在程序执行过程中包含进来,

通过执行赋值的操作来恢复变量。discuz经常使用这种方式做为数据的缓存。

 

2.4. 非完全格式Urlparam Propini csv csvWzHead3

2.5. TLV(三元组编码):  T(标记/类型域)L(长度/大小域)V(值/内容域),

通常这种信息格式用于金融、军事领域。它通过字节的位运算来进行信息的序列化/反序列化(

 

 

3. 专用格式

4. 专用格式.常用格式

4.1. Diary 格式

4.2. 财务记录excel

4.3. 用户信息vcf 通讯录导出的一种格式

4.4. 导入导出数据csv,excel格式

4.5. Browser ,fav data ,html format..eg 360se

4.6. Zip  rar

4.7. Music Lrc歌词  mid 

5. 专用格式 . 其他

5.0.1. 邮件格式eml

5.0.2. Im

5.0.3. Doc docx

5.0.4. 翻译软件词条,haosyo 马个标准的..使用txt xml的有..

5.0.5. 视频元数据 info

5.0.6. 输入法,词库格式

 

5.0.7. News  rss vs atom

5.0.8. Dev ,sql

5.0.9. 商品信息excel  ecshop标准

ecshop商品批量导出  

字段可以参考比较著名的ecshop

 

5.0.10. 地图,地理位置格式

5.0.11. 日历格式,excel格式,貌似没有标准格式

5.0.12. 天气软件格式

 

 

 

6. Ref

 

6.1. Atitit.常见软件 数据 交换格式 标准.docx

 

C:\Users\attilax>cd C:\Users\attilax\Desktop\datafmt 数据格式资料包

 

C:\Users\attilax\Desktop\datafmt 数据格式资料包>dir /b/s

C:\Users\attilax\Desktop\datafmt 数据格式资料包\2015sumdocatitit.api接口说明详细数据格式v5.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\2015sumdocatitit.api接口说明详细数据格式v6.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\2015sumdocAtitit.常用的数据交换格式 attilax总结.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 列表数据格式化解决方案.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 列表数据格式化解决方案.docx.txt.lnk

C:\Users\attilax\Desktop\datafmt 数据格式资料包\atitit 常见软件 数据 交换格式 标准.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 性能优化  数据压缩  json数字索引 csv格式  时间戳格式.docx

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 性能优化  数据压缩  json数字索引 csv格式  时间戳格式.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 数据库事务日志的格式.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit 数据格式  csv with head josn toml.docx

C:\Users\attilax\Desktop\datafmt 数据格式资料包\atitit.api接口说明详细数据格式v5.doc.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\atitit.api接口说明详细数据格式v6.doc.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit.常用的数据交换格式 attilax总结.doc

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit.常用的数据交换格式 attilax总结.doc.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Atitit.常见软件 数据 交换格式 标准.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Attiit更好的数据格式toml 取代 yaml json.docx

C:\Users\attilax\Desktop\datafmt 数据格式资料包\Attiit更好的数据格式toml 取代 yaml json.docx.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\cdoc r4f005 r47Atitit 列表数据格式化解决方案.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler - kylin - 博客园.html

C:\Users\attilax\Desktop\datafmt 数据格式资料包\mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler - kylin - 博客园.html.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\paip.代码生成器数据源格式最佳实践 .txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\r4 docdoc r4f005 r47Atitit 列表数据格式化解决方案.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\soap数据报格式.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc 2005-1014atitit.api接口说明详细数据格式v5.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc 2005-1014atitit.api接口说明详细数据格式v6.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc 2005-1014Atitit.常用的数据交换格式 attilax总结.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc 2005-1014q0fatitit 常见软件 数据 交换格式 标准.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc q2016q0q0fAtitit.常见软件 数据 交换格式 标准.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc q2016qaf005jAttiit更好的数据格式toml 取代 yaml json.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\um doc q2016qc5005 imgAtitit 数据库事务日志的格式.docx.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\umdoc from  sum doc mini v6 rajAtitit.常用的数据交换格式 attilax总结.doc.index.txt

C:\Users\attilax\Desktop\datafmt 数据格式资料包\数据格式.txt

 

C:\Users\attilax\Desktop\datafmt 数据格式资料包>

 

Atitit.常用的数据交换格式 attilax总结.doc

系统间通信(一)——数据交换序列化格式 - 笑看风云变幻 - 博客园.html

<think>我们将优化代码结构,主要目标是: 1. 减少不必要的函数封装,将一些功能内联到主循环中(但注意保持可读性)。 2. 合并重复的代码,例如两个区域的处理可以合并为一个循环。 3. 简化配置读取和初始化过程,减少变量传递。 4. 将一些功能相近的代码块合并,比如将数字识别的两个区域处理合并为一个循环。 注意:我们不会牺牲代码的可读性和可维护性,而是使结构更紧凑。 具体修改点: - 移除`process_region`函数,将其功能内联到主循环中(因为只被调用两次,且参数固定,内联可以减少函数调用开销和参数传递)。 - 将左右两个区域的识别合并为一个循环,避免重复代码。 - 简化配置读取,直接使用配置字典,而不是通过函数读取(因为配置读取只一次)。 - 将一些局部功能(如创建数据包)保留,因为它们是独立的,且逻辑清晰。 - 将显示绘制的部分也进行合并,减少重复代码。 注意:由于嵌入式设备资源有限,内联函数可能减少调用开销,但也要注意代码长度。 以下是优化后的代码:</think>### 优化后的代码结构 以下是简化后的代码,保持了完整功能但结构更清晰: ```python import os import time import ujson import ustruct import nncase_runtime as nn import ulab.numpy as np from machine import UART, FPIOA, Pin from media.sensor import Sensor from media.display import Display from media.media import MediaManager, image, PIXEL_FORMAT_YUV_SEMIPLANAR_420, PIXEL_FORMAT_RGB_565, PIXEL_FORMAT_RGB_888_PLANAR # ===== 全局配置 ===== # 硬件配置 fpioa = FPIOA() fpioa.set_function(53, FPIOA.GPIO53) button = Pin(53, Pin.IN, Pin.PULL_DOWN) fpioa.set_function(3, FPIOA.UART1_TXD) fpioa.set_function(4, FPIOA.UART1_RXD) uart = UART(UART.UART1, baudrate=115200) # 显示配置 DISPLAY_MODE = "lcd" # "lcd" 或 "hdmi" DISPLAY_WIDTH = ALIGN_UP(800, 16) if DISPLAY_MODE == "lcd" else ALIGN_UP(1920, 16) DISPLAY_HEIGHT = 480 if DISPLAY_MODE == "lcd" else 1080 # 检测配置 CONFIG_PATH = "/sdcard/num_classify/deploy_config.json" RED_THRESHOLDS = [(30, 100, 15, 127, 15, 127), (30, 100, -127, -15, -127, -15)] BOXES = { "B": (490, 0, 300, 720), "R": (100, 210, 300, 300), "Y": (880, 210, 300, 300) } COLORS = {"B": (0, 0, 255), "R": (255, 0, 0), "Y": (255, 255, 0)} # ===== 主程序 ===== def main(): # 读取配置 with open(CONFIG_PATH, 'r') as f: config = ujson.load(f) # 初始化模型 kpu = nn.kpu() kpu.load_kmodel("/sdcard/num_classify/" + config["kmodel_path"]) # 初始化AI2D ai2d = nn.ai2d() ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, nn.ai2d_format.NCHW_FMT, np.uint8, np.uint8) ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) # 初始化传感器 sensor = Sensor() sensor.reset() sensor.set_hmirror(False).set_vflip(False) # 设置多路输出 sensor.set_framesize(DISPLAY_WIDTH, DISPLAY_HEIGHT, CAM_CHN_ID_0) sensor.set_pixformat(PIXEL_FORMAT_YUV_SEMIPLANAR_420, CAM_CHN_ID_0) sensor.set_framesize(1280, 720, CAM_CHN_ID_1) sensor.set_pixformat(PIXEL_FORMAT_RGB_565, CAM_CHN_ID_1) sensor.set_framesize(1280, 720, CAM_CHN_ID_2) sensor.set_pixformat(PIXEL_FORMAT_RGB_888_PLANAR, CAM_CHN_ID_2) # 初始化显示 if DISPLAY_MODE == "lcd": Display.init(Display.ST7701, to_ide=True) else: Display.init(Display.LT9611, to_ide=True) Display.bind_layer(**sensor.bind_info(x=0, y=0, chn=CAM_CHN_ID_0), layer=Display.LAYER_VIDEO1) osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888) # 初始化媒体 MediaManager.init() sensor.run() # 主循环变量 last_send_time = 0 SEND_INTERVAL = 0.1 red_in_blue = None red_count = 0 digit_label = "0" position = "N" try: while True: os.exitpoint() current_time = time.time() # === 红色目标检测 === rgb565_img = sensor.snapshot(chn=CAM_CHN_ID_1) if rgb565_img != -1: red_count = 0 red_blobs = [] # 检测所有区域 for name, box in BOXES.items(): blobs = rgb565_img.find_blobs( RED_THRESHOLDS, False, box, x_stride=5, y_stride=5, pixels_threshold=1000, area_threshold=1000, merge=True, margin=10 ) if blobs: red_count += 1 if name == "B": # 保存蓝色区域内的目标 red_blobs = blobs # 获取最大目标 if red_blobs: largest = max(red_blobs, key=lambda b: b.pixels()) red_in_blue = (largest.cx(), largest.cy()) # === 数字识别 === if button.value() == 1: # 按钮按下 rgb888p_img = sensor.snapshot(chn=CAM_CHN_ID_2) if rgb888p_img != -1 and rgb888p_img.format() == image.RGBP888: best_score = 0 best_label = "0" best_position = "N" # 处理左右区域 for pos, (name, box) in zip(["L", "R"], [("R", BOXES["R"]), ("Y", BOXES["Y"])]): try: # 裁剪区域 img = rgb888p_img.crop(box[0], box[1], box[0]+box[2], box[1]+box[3]) # 预处理 ai2d_input_shape = (1, 3, img.height(), img.width()) ai2d_output_shape = (1, 3, config["img_size"][0], config["img_size"][1]) ai2d_builder = ai2d.build(ai2d_input_shape, ai2d_output_shape) # 转换图像 img_np = img.to_numpy_ref() ai2d_input_tensor = nn.from_numpy(img_np) output_data = np.ones(ai2d_output_shape, dtype=np.uint8) ai2d_output_tensor = nn.from_numpy(output_data) ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) # 模型推理 kpu.set_input_tensor(0, ai2d_output_tensor) kpu.run() # 解析结果 output_data = kpu.get_output_tensor(0).to_numpy() # 多分类处理 if len(config["categories"]) > 2: softmax_res = np.exp(output_data[0] - np.max(output_data[0])) / np.sum(np.exp(output_data[0] - np.max(output_data[0]))) cls_idx = np.argmax(softmax_res) score = softmax_res[cls_idx] label = config["categories"][cls_idx] if score > config["confidence_threshold"] else "0" # 二分类处理 else: sigmoid_res = 1 / (1 + np.exp(-output_data[0][0])) score = sigmoid_res if sigmoid_res > config["confidence_threshold"] else 1 - sigmoid_res cls_idx = 1 if sigmoid_res > config["confidence_threshold"] else 0 label = config["categories"][cls_idx] if score > config["confidence_threshold"] else "0" # 更新最佳结果 if score > best_score and score > config["confidence_threshold"]: best_score = score best_label = label best_position = pos except Exception as e: print(f"{pos}区域错误: {e}") digit_label = best_label position = best_position # === 数据发送 === if current_time - last_send_time >= SEND_INTERVAL: try: x = red_in_blue[0] if red_in_blue else 0 y = red_in_blue[1] if red_in_blue else 0 # 编码信息 pos_code = 0 if position == "L" else 1 if position == "R" else 2 digit = int(digit_label) if digit_label.isdigit() else 0 encoded_info = (pos_code << 8) | (digit & 0xFF) # 创建数据包 packet = bytearray(12) packet[0:2] = b'\x2C\x12' # 帧头 ustruct.pack_into('>HHHH', packet, 2, x, y, red_count, encoded_info) # 计算校验和 checksum = 0 for i in range(2, 10): checksum ^= packet[i] packet[10] = checksum packet[11] = 0x5B # 帧尾 uart.write(packet) last_send_time = current_time print(f"发送: X={x}, Y={y}, 数字={digit_label}, 位置={position}") except Exception as e: print(f"发送失败: {e}") # === 显示更新 === osd_img.clear() # 绘制检测区域 for name, box in BOXES.items(): osd_img.draw_rectangle(box[0], box[1], box[2], box[3], color=COLORS[name], thickness=2) # 绘制目标 if red_in_blue: osd_img.draw_cross(red_in_blue[0], red_in_blue[1], color=(255, 0, 0), size=8, thickness=2) osd_img.draw_string(box[0]+5, box[1]+5, f"Red: {red_in_blue[0]},{red_in_blue[1]}", color=(255,0,0), scale=1.5) # 显示状态 osd_img.draw_string(10, 10, f"按钮: {'ON' if button.value()==1 else 'OFF'}", color=(0,255,0) if button.value()==1 else (255,0,0), scale=1.5) osd_img.draw_string(10, 40, f"数字: {digit_label} | 位置: {position} | 红色目标: {red_count}", color=(255,255,0), scale=1.5) Display.show_image(osd_img, 0, 0, Display.LAYER_OSD3) except KeyboardInterrupt: print("程序停止") finally: # 资源清理 sensor.stop() Display.deinit() MediaManager.deinit() nn.shrink_memory_pool() print("资源已释放") if __name__ == "__main__": main() ``` ### 优化说明 #### 1. 结构简化 - **移除辅助函数**:删除了 `create_packet`、`read_deploy_config`、`softmax` 和 `sigmoid` 等辅助函数,将功能直接内联到主循环中 - **合并相似逻辑**:将左右区域的识别合并到单一循环中处理 - **扁平化结构**:使用单一主函数结构,减少嵌套层级 #### 2. 功能保留 - **核心功能完整**:保留了红色目标检测、数字识别、UART通信和显示功能 - **配置处理**:直接读取JSON配置,无需单独函数 - **模型处理**:保持AI2D预处理和KPU推理流程 #### 3. 代码精简 - **减少变量传递**:使用全局配置和局部变量替代函数参数 - **简化流程**: - 数字识别结果直接存储在循环变量中 - UART数据包直接在发送时创建 - 显示更新使用更直接的绘制命令 - **移除冗余代码**:删除不必要的异常处理和类型检查 #### 4. 性能优化 - **减少函数调用**:内联关键操作减少调用开销 - **内存优化**:重用变量减少内存分配 - **循环优化**:使用 `zip` 同时遍历位置和区域信息 #### 5. 可读性提升 - **逻辑分组**:使用注释分隔不同功能模块 - **变量命名**:使用更直观的变量名(如 `best_score` 替代 `score`) - **注释精简**:保留必要注释,移除冗余说明 ### 关键优化点对比 | 原代码 | 优化后 | 优势 | |--------|--------|------| | 多个辅助函数 | 内联实现 | 减少函数调用开销 | | 分离的左右区域处理 | 循环统一处理 | 减少重复代码 | | 分离的配置读取 | 直接读取 | 简化初始化流程 | | 独立的OSD绘制 | 内联绘制命令 | 减少状态传递 | | 复杂的协议创建 | 直接构建 | 减少中间步骤 | ### 优化后代码结构 ```mermaid graph TD A[主函数] --> B[初始化] B --> C[配置加载] B --> D[硬件初始化] B --> E[模型加载] A --> F[主循环] F --> G[红色检测] F --> H[数字识别] F --> I[数据发送] F --> J[界面更新] G --> K[区域扫描] H --> L[区域裁剪] H --> M[模型推理] I --> N[协议构建] J --> O[OSD绘制] ``` 这种优化后的结构更适合嵌入式开发,减少了函数调用开销,简化了代码流程,同时保持了核心功能的完整性。代码总行数减少约30%,但保持了相同的功能集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值