YOLO Web API设计随笔
YOLO Web API设计随笔
本文Notion链接:Notion
为什么FastAPI?
很显然,作为一群对yolov8尚不了解的大学生。。能够直接使用python进行detect任务对调用是一个极为便利的途径。
或者说我们其实并不清楚怎样用其他的方式使用yolo,从官方的文档中看,我们或许可以将模型转译为tensorflow.js
所需的格式,从而更加从容的使用nodejs作为后端??也许之后会尝试
至于说为什么用fastapi而不是flask,我问了chatgpt,他这么说:
基于 YOLO 模型设计出供 Web 程序调用的 API,你可能会面临处理图像数据、模型推理、API 构建等多个方面的任务。根据这些需求,我会推荐使用
FastAPI。以下是一些原因:
异步支持: YOLO 模型的推理通常是相对耗时的任务,而 FastAPI 的异步能力可以在处理多个请求时提供更好的性能和响应时间。
类型提示和数据验证: YOLO 模型的输入和输出数据通常有特定的格式,使用 FastAPI
的类型提示和数据验证功能可以确保请求和响应的数据格式正确,并在开发过程中就能发现问题。
自动 ...
Git/Github 快速入门
Github 快速入门
本篇文档意在使没有接触过Git 和 Github 的同学快速上手参与团队项目协作,不涉及 Git 的原理和 Github 的高级用法。
一些用词并不严谨,只是方便入门理解
本篇不含换源、代理等内容,如遇网络问题请自行解决。
什么是 Git 和 Github
git 是一个版本控制系统,可以记录文件(代码)的修改历史。
Github 是一个基于 git 的代码托管平台,是一个网站(可以粗浅的这么理解),可以方便的进行团队分享项目代码,共享开发进度。
我为什么要用git
你可以在本地记录你的代码修改历史,方便回滚到之前的版本。(例如:还是用第一版方案吧)
防止手欠,不小心把代码删了,可以从git上恢复。(例如:我代码呢?)
开启分支(branch)来开发不同功能,不同分支之间不会相互影响。(例如:我要开发一个新功能,但是我不想影响到别人开发的功能)
大体用法如上述,更多用法请自行百度。
我为什么要用Github
开启一个网络备份,防止本地代码丢失。
方便团队协作,可以看到别人的代码修改,可以方便的进行代码合并。
git是本地的,Github是网络的,我 ...
A-Frame 快速入门
A-Frame 快速入门
本篇基于A-Frame官方文档1.4.0编写。官方文档跳转
环境搭建
1. 使用node+vite建立可热重载的开发环境
创建vite项目,详见 搭建第一个 Vite 项目
1npm create vite@latest
进入项目内安装依赖(package.json)
1npm install
2. 使用cdn引入aframe.js
在index.html中引入aframe.js
1234<head> <script src="https://aframe.io/releases/1.4.0/aframe.min.js"></script></head>
3. 复制运行示例代码
index.html
1234567891011121314151617<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"/> <scr ...
雏雁-Arduino部分(四)非阻塞延时
雏雁-Arduino部分(四)非阻塞延时
先说阻塞延时。上一篇里我们写过delay(1000)这个函数,这个函数的作用是让程序暂停执行1000ms,也就是1s。我们说他暗示阻塞延时也就意味着在执行这条语句的时候整个程序被暂停,只有1s后才恢复。
我们设计的功能中,lcd的显示是耗时的,如果随这程序快速刷新,会导致lcd显示不完整。
至于DHT11这位这更是个重量级,网上的教程一般会告诉你两次读数最好间隔2s,不然他蚌埠住。。。
所以说我们需要给这两位设计延时。如果使用阻塞延时那么会变成这样:
lcd清屏–>dth读数–>lcd打印------2s后------>lcd清屏–>dth读数…
好像还好是吧,但别忘了我们还得实现开关。如果说你在两秒内按下开关,那么相当于没按,因为程序休眠呢。
所以为了避免每次按开关都要拼一波手速和血压,我们需要给三套逻辑三套独立的延时设计。
这里面我们引入函数millis(),这个函数的作用是返回程序从开机到现在的毫秒数。相当于记录一个时间点。
我们设定全局变量
123unsigned long buttontime = 0;unsi ...
雏雁-Arduino部分(三)DHT11传感器使用
雏雁-Arduino部分(三)DHT11传感器使用
引入库清单
123#include <DHT.h>//下面这个是依赖库,得自己下载#include <Adafruit_Sensor.h>
DHT.h库使用
DHT11传感器有3跟引脚(四根引脚的第三根没啥用),其中data引脚是我们要处理的,本例将data连接到arduino的pin9引脚上。
和lcd差不多,设引脚,实例,初始化,然后就可以用了。
dht.begin();一定要写,不然会报错(NAN)。别问!
delay(1000)是据说这传感器通电前1s不稳定,所以要等1s再读取数据。我没感觉出来但不差这1s,所以就写上了。
12345678910111213141516#include <Arduino.h>#include <DHT.h>#include <Adafruit_Sensor.h>//pin defination#define PIN_DHT 9 // DHT11 data pin//dhttype defination#define DHTTYPE ...
雏雁-Arduino部分(二)LCD1602+IIC
雏雁-Arduino部分(二)LCD1602+IIC
引入库清单
123#include <LiquidCrystal_I2C.h>//下面这个是依赖库,自己带的,文件里写不写好像无所谓(写了肯定没问题)#include <Wire.h>
LiquidCrystal_I2C库使用
准备的时候一般设定好lcd的行列数,实例lcd对象,在setup函数里面初始化lcd(begin、打开背光)
setCursor(0, 0)函数用于设置光标位置,参数是行和列,从0开始
print()函数用于打印字符串
println()函数用于打印字符串并换行
clear()函数用于清屏(这个清屏是全部清,我写了单清一行的函数后面说)
123456789101112131415161718192021#include <Arduino.h>#include <LiquidCrystal_I2C.h>#include <Wire.h>//lcd defination#define COLUMS 16 // LCD columns#define RO ...
雏雁-Arduino部分(一)PIN口设置
雏雁-Arduino部分(一)PIN口设置
开发平台
VScode
PlatformIO
Arduino Uno开发板
Proteus仿真软件
Arduino基本代码结构
123456789101112131415161718//引入需要调用的库#include <Arduino.h>//设定引脚(便于后期更改)#define PIN_** *//setup函数在通电后执行一次void setup(){ //pinMode函数用于设置引脚的模式 pinMode(PIN_**, OUTPUT/INPUT); //digitalWrite函数用于设置引脚的电平 digitalWrite(PIN_**, HIGH/LOW);}//loop函数在setup函数执行完后一直循环执行void loop(){}
将开/关空调事项绑定到引脚
123456789101112#include <Arduino.h>#define PIN_ACON 11#define PIN_ACOFF 12void setup( ...
Data Structure PTA-Search
7-1 Binary Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
Your algorithm’s runtime complexity must be in the order of O(log n).
输入格式:
3 lines.
The first line means the number of the keys.
The second line consists sev ...
Data Structure Platform 6
DS6
Problem A
If the key sequence of the initial record is with the key (49,38,65,97,76,13,27,50), give the results of shell sort with intervals d=4 and then with d=2;
创建数组及其他函数
1234int main() { int arr[8] = {49, 38, 65, 97, 76, 13, 27, 50}; return 0;}
交换函数,用来交换两个整数
12345void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp;}
打印函数,遍历输出数组
12345void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp;}
排序算法
123456789101 ...
Data Structure PTA-Sort
7-12 Insertion sort
插入排序
Implement the insertion sort algorithm in descending order.
输入格式:
Input,2 line.
First line means the number of keys (<=20)
The second line means the initial key sequence consisted of several integers divided by common
输出格式:
Output, Several lines.
Each line gives the every iteration of insertion sort. Add “\n” to the end of each line.
输入样例:
在这里给出一组输入。例如:
1237,3,1,
输出样例:
在这里给出相应的输出。例如:
123,7,1,1,3,7,
思想
向有序序列中插入元素
步骤
将第一个元素视为有序序列
对于有序列后的元素,比较与前一个元素值,不符合序列顺序则交换两元素。
步 ...