From 9f56229c593f0995de3efe1ca3683a73d4263b72 Mon Sep 17 00:00:00 2001
From: tanglong <842690096@qq.com>
Date: Thu, 30 Oct 2025 10:41:42 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=20=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AiSportsMicrospaceDB.csproj | 13 +++++
.../DBContext/AppDbContext.cs | 20 +++++++
AiSportsMicrospaceDB/Entities/BasicConfig.cs | 17 ++++++
DB/AiSportsMicrospaceDB.db | Bin 0 -> 12288 bytes
Wpf_AiSportsMicrospace/App.xaml | 4 +-
Wpf_AiSportsMicrospace/App.xaml.cs | 46 ++++++++++++++--
Wpf_AiSportsMicrospace/MainWindow.xaml.cs | 33 +++++++----
.../Service/ConfigService.cs | 52 ------------------
.../Views/JumpRope/GroupJumpRope.xaml.cs | 1 -
.../Wpf_AiSportsMicrospace.csproj | 16 ++++++
.../Wpf_AiSportsMicrospace.sln | 10 +++-
Wpf_AiSportsMicrospace/appsettings.json | 5 ++
12 files changed, 145 insertions(+), 72 deletions(-)
create mode 100644 AiSportsMicrospaceDB/AiSportsMicrospaceDB.csproj
create mode 100644 AiSportsMicrospaceDB/DBContext/AppDbContext.cs
create mode 100644 AiSportsMicrospaceDB/Entities/BasicConfig.cs
create mode 100644 DB/AiSportsMicrospaceDB.db
delete mode 100644 Wpf_AiSportsMicrospace/Service/ConfigService.cs
create mode 100644 Wpf_AiSportsMicrospace/appsettings.json
diff --git a/AiSportsMicrospaceDB/AiSportsMicrospaceDB.csproj b/AiSportsMicrospaceDB/AiSportsMicrospaceDB.csproj
new file mode 100644
index 0000000..3b09874
--- /dev/null
+++ b/AiSportsMicrospaceDB/AiSportsMicrospaceDB.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/AiSportsMicrospaceDB/DBContext/AppDbContext.cs b/AiSportsMicrospaceDB/DBContext/AppDbContext.cs
new file mode 100644
index 0000000..ddec24f
--- /dev/null
+++ b/AiSportsMicrospaceDB/DBContext/AppDbContext.cs
@@ -0,0 +1,20 @@
+using AiSportsMicrospaceDB.Entities;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AiSportsMicrospaceDB.DBContext
+{
+ public class AppDbContext : DbContext
+ {
+ public AppDbContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ public DbSet BasicConfig { get; set; }
+ }
+}
diff --git a/AiSportsMicrospaceDB/Entities/BasicConfig.cs b/AiSportsMicrospaceDB/Entities/BasicConfig.cs
new file mode 100644
index 0000000..5b02428
--- /dev/null
+++ b/AiSportsMicrospaceDB/Entities/BasicConfig.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AiSportsMicrospaceDB.Entities
+{
+ public class BasicConfig
+ {
+ // ✅ 主键
+ public int Id { get; set; }
+ public string Host { get; set; }
+ public string UserName { get; set; }
+ public string Password { get; set; }
+ }
+}
diff --git a/DB/AiSportsMicrospaceDB.db b/DB/AiSportsMicrospaceDB.db
new file mode 100644
index 0000000000000000000000000000000000000000..162a000cbd62a45ae8236f7a0a15e241aba3e75d
GIT binary patch
literal 12288
zcmeI#&uhXk6bJA$jtvC&3Vr>8e~45oQXlWa9la=I0lLP~K*B!rOMO5AqgaOY$<;QMC$S4eU5
zzO3*ndHy9XuK0q000bZa0SG_<0uX=z1Rwwb2>f3ll&95Z(;4Q;^DMQ?8P~ESn=aqd
z#rSYo>O{&jij3C|6dkOsFOqrM;+>6;nR8aH)tt}kpPcQ)PRE^WF`2&Zb!8!!yEo%f
zy;3F)*MD)z*GAo|h;-kOj)Q
- StartupUri="Views/Main.xaml">
+
diff --git a/Wpf_AiSportsMicrospace/App.xaml.cs b/Wpf_AiSportsMicrospace/App.xaml.cs
index 1a07e67..4fbe65e 100644
--- a/Wpf_AiSportsMicrospace/App.xaml.cs
+++ b/Wpf_AiSportsMicrospace/App.xaml.cs
@@ -1,8 +1,17 @@
-using System.Configuration;
+using AiSportsMicrospaceDB.DBContext;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
+using Microsoft.ML.Runtime;
+using System.Configuration;
using System.Data;
+using System.IO;
using System.Windows;
using Yztob.AiSports.Common;
using Yztob.AiSports.Common.Implement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+using Wpf_AiSportsMicrospace.Views;
+
namespace Wpf_AiSportsMicrospace;
@@ -11,16 +20,45 @@ namespace Wpf_AiSportsMicrospace;
///
public partial class App : Application
{
+ public static Microsoft.Extensions.Hosting.IHost AppHost { get; private set; }
+
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
#if DEBUG
- // 初始化 DebugTracker
- DebugTracker.Enabled = true;
- DebugTracker.Channels.Add(new DiagnosisDebugTrackChannel());
+ DebugTracker.Enabled = true;
+ DebugTracker.Channels.Add(new DiagnosisDebugTrackChannel());
#endif
+ AppHost = Host.CreateDefaultBuilder()
+ .ConfigureAppConfiguration((context, config) =>
+ {
+ config.SetBasePath(Directory.GetCurrentDirectory());
+ config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
+ })
+ .ConfigureServices((context, services) =>
+ {
+ var connectionString = context.Configuration.GetConnectionString("DefaultConnection");
+ services.AddDbContext(options =>
+ options.UseSqlite(connectionString));
+
+ services.AddSingleton();
+ })
+ .Build();
+
+ AppHost.Start();
+
+ using (var scope = AppHost.Services.CreateScope())
+ {
+ var db = scope.ServiceProvider.GetRequiredService();
+ //db.Database.EnsureDeleted(); // 删除数据库和表
+ db.Database.EnsureCreated();
+ }
+
+ // 用 DI 创建窗口
+ var mainWindow = AppHost.Services.GetRequiredService();
+ mainWindow.Show();
}
}
diff --git a/Wpf_AiSportsMicrospace/MainWindow.xaml.cs b/Wpf_AiSportsMicrospace/MainWindow.xaml.cs
index 7648320..a137ef1 100644
--- a/Wpf_AiSportsMicrospace/MainWindow.xaml.cs
+++ b/Wpf_AiSportsMicrospace/MainWindow.xaml.cs
@@ -1,4 +1,6 @@
-using Emgu.CV.Reg;
+using AiSportsMicrospaceDB.DBContext;
+using Emgu.CV.Reg;
+using Microsoft.EntityFrameworkCore;
using SharpDX.Direct3D9;
using SkiaSharp;
using System.Diagnostics;
@@ -6,6 +8,7 @@ using System.Drawing.Imaging;
using System.IO;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
@@ -15,7 +18,6 @@ using System.Windows.Shapes;
using System.Windows.Threading;
using Wpf_AiSportsMicrospace.Common;
using Wpf_AiSportsMicrospace.Dto;
-using Wpf_AiSportsMicrospace.Service;
using Yztob.AiSports.Inferences.Abstractions;
using Yztob.AiSports.Inferences.Things;
using Yztob.AiSports.Postures.Sports;
@@ -41,13 +43,13 @@ public partial class MainWindow : Window
private WriteableBitmap _videoBitmap;
private int _lastFrameNumber = -1;
- ConfigService configService = new ConfigService();
+ private readonly AppDbContext _context;
#endregion
-
- public MainWindow()
+ public MainWindow(AppDbContext context)
{
InitializeComponent();
+ _context = context;
// 输出到控制台
_humanPredictor = HumanPredictorFactory.Create(HumanPredictorType.SingleHigh);
@@ -104,6 +106,15 @@ public partial class MainWindow : Window
private void ping_Click(object sender, RoutedEventArgs e)
{
+ var config = _context.BasicConfig.FirstOrDefault();
+
+ if (config != null)
+ {
+ //var ip = config.Ip;
+ }
+
+
+
var host = this.host.Text.Trim();
if (string.IsNullOrWhiteSpace(host))
{
@@ -264,12 +275,11 @@ public partial class MainWindow : Window
//VoiceBroadcast.PlayTick();
}
- private void DrawJumpRope3DPointsWithGlow()
+ private async Task DrawJumpRope3DPointsWithGlow()
{
if (videoImage == null || overlayCanvas == null) return;
- configService.LoadAllConfigs(); // 从文件加载 ConfigDic
- ConfigSet jumpRopeConfig;
+ ConfigSet jumpRopeConfig = new ConfigSet();
double imgWidth = videoImage.ActualWidth;
double imgHeight = videoImage.ActualHeight;
@@ -282,7 +292,9 @@ public partial class MainWindow : Window
bool needSaveConfig = false;
- if (!configService.ConfigDic.TryGetValue("rope-skipping", out jumpRopeConfig) || jumpRopeConfig.Points.Count == 0)
+ var config = await _context.BasicConfig.FirstOrDefaultAsync();
+
+ if (config!=null)
{
// 没有配置,则生成默认配置
jumpRopeConfig = new ConfigSet { Name = "rope-skipping" };
@@ -351,8 +363,7 @@ public partial class MainWindow : Window
// 保存配置(如果是新生成的)
if (needSaveConfig)
{
- configService.ConfigDic[jumpRopeConfig.Name] = jumpRopeConfig;
- configService.SaveAllConfigs();
+
}
}
diff --git a/Wpf_AiSportsMicrospace/Service/ConfigService.cs b/Wpf_AiSportsMicrospace/Service/ConfigService.cs
deleted file mode 100644
index 52685e1..0000000
--- a/Wpf_AiSportsMicrospace/Service/ConfigService.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Wpf_AiSportsMicrospace.Dto;
-
-namespace Wpf_AiSportsMicrospace.Service
-{
- ///
- /// 配置服务
- ///
- public class ConfigService
- {
- public Dictionary ConfigDic { get; set; } = new Dictionary();
-
- public ConfigService()
- {
- LoadAllConfigs();
- }
-
- ///
- /// 保存配置信息
- ///
- ///
- public void SaveAllConfigs(string fileName = "configs.json")
- {
- string basePath = AppContext.BaseDirectory; // 当前运行目录
- string filePath = Path.Combine(basePath, fileName);
-
- var json = JsonSerializer.Serialize(ConfigDic, new JsonSerializerOptions { WriteIndented = true });
- File.WriteAllText(filePath, json);
- }
-
- ///
- /// 加载配置信息
- ///
- ///
- public void LoadAllConfigs(string fileName = "configs.json")
- {
- string basePath = AppContext.BaseDirectory;
- string filePath = Path.Combine(basePath, fileName);
-
- if (!File.Exists(filePath)) return;
-
- var json = File.ReadAllText(filePath);
- ConfigDic = JsonSerializer.Deserialize>(json);
- }
- }
-}
diff --git a/Wpf_AiSportsMicrospace/Views/JumpRope/GroupJumpRope.xaml.cs b/Wpf_AiSportsMicrospace/Views/JumpRope/GroupJumpRope.xaml.cs
index 0b40454..e58fbcd 100644
--- a/Wpf_AiSportsMicrospace/Views/JumpRope/GroupJumpRope.xaml.cs
+++ b/Wpf_AiSportsMicrospace/Views/JumpRope/GroupJumpRope.xaml.cs
@@ -29,7 +29,6 @@ using Wpf_AiSportsMicrospace.Common;
using Wpf_AiSportsMicrospace.Dto;
using Wpf_AiSportsMicrospace.Enum;
using Wpf_AiSportsMicrospace.MyUserControl;
-using Wpf_AiSportsMicrospace.Service;
using WpfAnimatedGif;
using Yztob.AiSports.Common;
using Yztob.AiSports.Common.Implement;
diff --git a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj
index 9830e4e..63e925d 100644
--- a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj
+++ b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj
@@ -9,6 +9,7 @@
+
@@ -97,6 +98,12 @@
+
+
+ Always
+
+
+
Always
@@ -141,6 +148,11 @@
+
+
+
+
+
@@ -153,6 +165,10 @@
+
+
+
+
..\sdks\Yunzhi.Library.dll
diff --git a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln
index cd84066..ce8b74a 100644
--- a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln
+++ b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln
@@ -1,10 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.13.35828.75 d17.13
+# Visual Studio Version 18
+VisualStudioVersion = 18.0.11111.16 d18.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf_AiSportsMicrospace", "Wpf_AiSportsMicrospace.csproj", "{345052A8-36AD-4739-80F6-991A4DD84ADC}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AiSportsMicrospaceDB", "..\AiSportsMicrospaceDB\AiSportsMicrospaceDB.csproj", "{76186799-4B51-4DE3-9F61-E0F4B5A40553}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76186799-4B51-4DE3-9F61-E0F4B5A40553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76186799-4B51-4DE3-9F61-E0F4B5A40553}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76186799-4B51-4DE3-9F61-E0F4B5A40553}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76186799-4B51-4DE3-9F61-E0F4B5A40553}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Wpf_AiSportsMicrospace/appsettings.json b/Wpf_AiSportsMicrospace/appsettings.json
new file mode 100644
index 0000000..877ad19
--- /dev/null
+++ b/Wpf_AiSportsMicrospace/appsettings.json
@@ -0,0 +1,5 @@
+{
+ "ConnectionStrings": {
+ "DefaultConnection": "Data Source=AiSportsMicrospaceDB.db"
+ }
+}
\ No newline at end of file