# dotnetProject大作业
**Repository Path**: Xirro/dotnet-project-big-assignment
## Basic Information
- **Project Name**: dotnetProject大作业
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-03-02
- **Last Updated**: 2025-03-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 2024秋dotnet大作业
本仓库提交dotnet大作业源码
小组成员:汪操、郑贤锐、颜韩博、张锐
### 项目背景
- 图像文件数据量大
- 管理困难
- 占用存储空间
随着数码摄影的普及,越来越多的用户积累了大量的图像文件。这样不仅占用大量本地空间,并且管理和检索图片十分困难。AImage是一个智能相册项目,旨在利用计算机视觉和图像处理技术,自动化图像的标签生成、分类和搜索,并且将图像存储在云端。帮助用户快速找到相关图像,减少本地存储开销,并提供跨平台的便捷管理体验。
### 项目目标
- **智能分类**
利用图像识别技术,自动为每张图像生成标签和描述,支持图像的智能分类和快速检索。
- **快速检索**
将用户的输入与数据库中图像标签和描述进行比对,快速检索用户查找的图片。
- **云端存储**
将图片的元数据(标签、描述、ID)存储至云数据库、并将图像数据存储至云服务器
- **跨平台支持**
前端使用Avalonia框架,后端使用.NET Core和EF框架,引用能在Windows、Linux、macOS上运行
- **易于扩展**
前端使用MVVM设计模式,架构上前后端分离,系统能够方便地进行功能扩展或与其他服务进行集成。
### 项目架构

### 用例图

### 顺序图
以上传和获取图像描述为例

### 跨平台部署测试
Window 10和Ubuntu 22都可运行,Ubuntu 22 .NET 9.0环境下成功运行前端Avalonia项目和后端项目

### 项目分工
| **姓名** | **分工** |
| :------: | ------------------------------------------------------------ |
| 汪操 | Avalonia UI设计、本地缓存设计;
完成数据库访问的Web API (图像删除、检索)
项目架构指导、项目解决方案的寻找和完善
跨平台部署测试
项目汇报、ppt制作 |
| 郑贤锐 | 完成图像处理算法的Web API(基于Yolov5和Blip模型)
模型准确度测试 |
| 颜韩博 | 部分数据库访问的Web API(图像上传)
数据库表设计 |
| 张锐 | 参与前后端对接工作,确保前后端逻辑对接的完善
使用postman测试web api
部分图像处理算法的测试 |
### 项目进度
| **功能** | **完成度** |
| -------------------------- | ---------- |
| 查看本地图片,获取描述 | 已完成 |
| 向云端上传、下载、查询图片 | 已完成 |
| 联网查找图片并提供下载选项 | 已完成 |
| 查看云端各个分类的所有图片 | 已完成 |
| 跨平台测试 | 成功 |
### 可以改进的地方
1.图像数据传输了三次:本地到C#数据库后端、C#后端到python算法服务、C#后端到云服务器进行数据持久化,有一定开销。
- 可以考虑将C#和python的WEB API项目部署到同一物理机,同时将数据持久化放在这台物理机上,减少数据传输开销,还可以考虑学习nginx进行优化。
2.可以添加用户管理功能
### 运行注意
由于远程服务器和数据库涉及到密码等隐私,已在源代码中删除,如需要运行需要在下面一些文件进行添加
- pyweb-api:连接数据库部分输入云数据库相关条目
- AImage/Models/PexelPageModel.cs:填入自己申请的Pexel API
- AImageWebAPI/Controllers/DataBase.cs:填入远程服务器相关信息
- AImageWebAPI/appsetting.json:填入远程数据库相关信息