FastApi-快速入门 加入逻辑 二张图片的比对 2

加入图片相似度功能

getpic进行网络图片保存在本地

# -*- coding: utf-8 -*-
import os
import uuid
from PIL import Image
import requests
from io import BytesIO# 对图片进行统一化处理
def get_thum(image, size=(64, 64), greyscale=False):if image is None:raise ValueError("Cannot process None image")image = image.resize(size, Image.ANTIALIAS)if greyscale:image = image.convert('L')return imagedef getpic(image_url):random_filename = str(uuid.uuid4()) + '.jpg'try:response = requests.get(image_url)if response.status_code == 200:image_content = response.contentimage_stream = BytesIO(image_content)image = Image.open(image_stream)save_path = random_filenameimage.save(save_path)print(f'图片已保存到:{os.path.abspath(save_path)}')# 这里应该返回 Image 对象,而不是文件路径# 但是由于我们稍后要关闭文件,所以返回文件路径,并在需要时重新打开return save_pathelse:print('无法获取图片,服务器响应码:', response.status_code)except requests.exceptions.InvalidURL as e:print(f"Invalid URL: {e}")except requests.exceptions.RequestException as e:print(f"An error occurred while making the request: {e}")# 计算图片的余弦距离(实际上计算的是余弦相似度)def similarity_pics(image_path1, image_path2):# 打开图像文件并获取 Image 对象image1 = Image.open(image_path1).convert('L')image2 = Image.open(image_path2).convert('L')# 确保图像是相同的大小和模式(例如,都是 RGB 或都是 L(灰度))# 这里我们假设图像已经是相同的大小,因为它们都经过了 get_thum 的处理# 将图像转换为向量# 注意:这里的实现方式可能需要更改,因为直接将像素值平均可能不是最佳方式# 通常,您可能会将图像转换为特征向量,使用例如 SIFT、SURF 或其他图像特征提取方法vectors = [list(map(int, image1.getdata())), list(map(int, image2.getdata()))]# 计算向量的余弦相似度a, b = vectorsa_norm = sum([x ** 2 for x in a]) ** 0.5b_norm = sum([x ** 2 for x in b]) ** 0.5dot_product = sum(a_i * b_i for a_i, b_i in zip(a, b))similarity = dot_product / (a_norm * b_norm)return similarity

接口代码:

import os
import uvicorn
from fastapi import FastAPI, Form
from twopics import  similarity_pics, getpic
app = FastAPI()@app.get("/")
async def index():"""注册一个根路径:return:"""return {"message": "自定义请求"}@app.post("/")
async def login(pic1: str = Form(...), pic2: str = Form(...)):image1 = getpic(pic1)image2 = getpic(pic2)re = similarity_pics(image1, image2)os.remove(image1)os.remove(image2)return {"re": re,"brief":'图片相似度'}@app.get("/about")
async def about():"""项目信息:return:"""return {"app_name": "人工智能识别","app_version": "v0.0.1"}if __name__ == "__main__":uvicorn.run(app, host="127.0.0.1", port=8222)

调试

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《操作系统导论》笔记

操作系统三个关键:虚拟化( virtualization) 并发(concurrency) 持久性(persistence) 1 CPU虚拟化 1.1 进程 虚拟化CPU:许多任务共享物理CPU,让它们看起来像是同时运行。 时分共享:运行一个进程一段时间…

wsl(ubuntu)创建用户

我们打卡ubuntu窗口,如果没有创建用户,那么默认是root用户 用户的增删改查 查 查询所有的用户列表 cat /etc/passwd | cut -d: -f1cat /etc/passwd: 这个命令用于显示 /etc/passwd 文件的内容。/etc/passwd 文件包含了系统上所有用户的基本信息。每一…

将文本文件导入Oracle数据库的简便方法:SQL Developer

需求 我有一个文本文件dbim.txt,是通过alert log生成的,内容如下: 2020-09-11 2020-09-11 ... 2023-12-03 2023-12-03 2023-12-26我已经在Oracle数据库中建立了目标表: create table dbim(a varchar(16));我想把日志文件导入Or…

风车模型与代码

这个模型使用NetLogo乌龟来重复绘制圆圈,定期转动,以便显示出类似万花筒或风车的效果。这是一个演示,展示了一组简单的代理规则如何产生复杂而美丽的图案。 内部工作原理非常简单。创建了许多乌龟,它们的笔都是放下的&#xff08…

独立站的移动端优化:确保网站在手机和平板设备上具有良好的用户体验和交互效果

独立站的移动端优化是至关重要的,因为越来越多的用户通过手机和平板设备访问网站。为了确保在移动设备上具备良好的用户体验和交互效果,以下是一些建议: 响应式设计:使用响应式网页设计,使网站能够根据不同的设备屏幕…

进程是什么样子

你心中的进程长什么样子 进程是一个执行的过程。 1.进程的组成 1.1 进程控制块(PCB):是进程存在的唯一标识,是进程的灵魂 1.2 进程实体:程序、程序要处理的数据集合。 2.进程控制块 3.进程的调度状态

透明触摸屏展示柜的安装,需要注意什么

透明触摸屏展示柜的安装需要注意以下几个方面: 确定安装位置:选择一个合适的位置,确保展示柜的摆放位置合理,便于观看和管理。同时,要考虑到电源和信号线的连接,以及展示柜与周围环境的协调性。 检查透明触…

当试图回复传入消息时,消息应用程序会闪烁

问题描述: Actual Results: Unable to reply for incoming message as Messaging app flickers and closes. Expected Results: User should be able to send reply for incoming messages. Reproduction Steps: Stay in home screen. Receive an incoming mes…

5年经验之谈 —— 探索自动化测试用例设计粒度!

自动化测试用例的粒度指的是测试用例的细致程度,即每个测试用例检查的功能点的数量和范围。 通常,根据测试用例的粒度,可以被分为3种不同的层次,从更低层次的细粒度到更高层次的粗粒度。 第一种:单元测试 - 细粒度 单…

最常用的自动化测试框架汇总

在开始学习python自动化测试之前,先了解目前市场上的自动化测试框架有哪些? 随着技术的不断迭代更新,优胜劣汰也同样发展下来。从一开始工具型自动化,到现在的框架型;从一开始的能用,到现在的不仅能用&…

go构建项目与打包

环境搭建 使用的组件及版本 operator-sdk v1.22.0go 1.20.0 linux/amd64git 1.8.3.1k8s 1.18.5docker 20.10.5 前期配置 安装Git yum install git安装docker yum install docker-ce安装go 官网下载 tar -C /usr/local/ -xvf go1.20.linux-amd64.tar.gz 环境配置 // 将go配置…

手机卡丢了不要急,全新补卡攻略赶紧收藏!

最近收到一些小伙伴的留言,手机卡办了好几张,所以就出现了手机卡丢失的现象。手机卡丢失补办更是让一些小伙伴们摸不着头脑。怎么补?如何补?需要哪些资料等等一系列的问题,让许多小伙伴都无从下手。今天小编就给大家整…