C# RAM Stable Diffusion 提示词反推 Onnx Demo

C# RAM Stable Diffusion 提示词反推 Onnx Demo

    正在检查是否收录...

目录

介绍

效果

模型信息

项目

代码

下载

C# RAM Stable Diffusion 提示词反推 Onnx Demo

介绍

github地址:GitHub - xinyu1205/recognize-anything: Open-source and h2 foundation image recognition models.

Open-source and h2 foundation image recognition models.

效果

模型信息

Model Properties
-------------------------
---------------------------------------------------------------

Inputs
-------------------------
name:input
tensor:Float[1, 3, 384, 384]
---------------------------------------------------------------

Outputs
-------------------------
name:output
tensor:Float[1, 4585]
---------------------------------------------------------------

项目

代码

using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace Onnx_Demo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png"; string image_path = ""; DateTime dt1 = DateTime.Now; DateTime dt2 = DateTime.Now; string model_path; Mat image; SessionOptions options; InferenceSession onnx_session; Tensor<float> input_tensor; List<NamedOnnxValue> input_container; IDisposableReadOnlyCollection<DisposableNamedOnnxValue> result_infer; DisposableNamedOnnxValue[] results_onnxvalue; Tensor<float> result_tensors; StringBuilder sbTags = new StringBuilder(); StringBuilder sbTagsCN = new StringBuilder(); StringBuilder sb = new StringBuilder(); public string[] class_names; List<Tag> ltTag = new List<Tag>(); private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = fileFilter; if (ofd.ShowDialog() != DialogResult.OK) return; pictureBox1.Image = null; image_path = ofd.FileName; pictureBox1.Image = new Bitmap(image_path); textBox1.Text = ""; image = new Mat(image_path); } float[] mean = { 0.485f, 0.456f, 0.406f }; float[] std = { 0.229f, 0.224f, 0.225f }; public void Normalize(Mat src) { src.ConvertTo(src, MatType.CV_32FC3, 1.0 / 255); Mat[] bgr = src.Split(); for (int i = 0; i < bgr.Length; ++i) { bgr[i].ConvertTo(bgr[i], MatType.CV_32FC1, 1 / std[i], (0.0 - mean[i]) / std[i]); } Cv2.Merge(bgr, src); foreach (Mat channel in bgr) { channel.Dispose(); } } public float[] ExtractMat(Mat src) { OpenCvSharp.Size size = src.Size(); int channels = src.Channels(); float[] result = new float[size.Width * size.Height * channels]; GCHandle resultHandle = default; try { resultHandle = GCHandle.Alloc(result, GCHandleType.Pinned); IntPtr resultPtr = resultHandle.AddrOfPinnedObject(); for (int i = 0; i < channels; ++i) { Mat cmat = new Mat( src.Height, src.Width, MatType.CV_32FC1, resultPtr + i * size.Width * size.Height * sizeof(float)); Cv2.ExtractChannel(src, cmat, i); cmat.Dispose(); } } finally { resultHandle.Free(); } return result; } private void button2_Click(object sender, EventArgs e) { if (image_path == "") { return; } button2.Enabled = false; textBox1.Text = ""; sb.Clear(); sbTagsCN.Clear(); sbTags.Clear(); Application.DoEvents(); image = new Mat(image_path); //图片缩放 Mat resize_image = new Mat(); Cv2.Resize(image, resize_image, new OpenCvSharp.Size(384, 384)); Normalize(resize_image); var data = ExtractMat(resize_image); resize_image.Dispose(); image.Dispose(); // 输入Tensor input_tensor = new DenseTensor<float>(data, new[] { 1, 3, 384, 384 }); //将 input_tensor 放入一个输入参数的容器,并指定名称 input_container.Add(NamedOnnxValue.CreateFromTensor("input", input_tensor)); dt1 = DateTime.Now; //运行 Inference 并获取结果 result_infer = onnx_session.Run(input_container); dt2 = DateTime.Now; // 将输出结果转为DisposableNamedOnnxValue数组 results_onnxvalue = result_infer.ToArray(); // 读取第一个节点输出并转为Tensor数据 result_tensors = results_onnxvalue[0].AsTensor<float>(); var result_array = result_tensors.ToArray(); double[] scores = new double[result_array.Length]; for (int i = 0; i < result_array.Length; i++) { double score = 1 / (1 + Math.Exp(result_array[i] * -1)); scores[i] = score; } List<Tag> tags = new List<Tag>(ltTag); List<Tag> topTags = new List<Tag>(); for (int i = 0; i < scores.Length; i++) { if (scores[i] > tags[i].Threshold) { tags[i].Score = scores[i]; topTags.Add(tags[i]); } } topTags.OrderByDescending(x => x.Score).ToList(); foreach (var item in topTags) { sbTagsCN.Append(item.NameCN + ","); sbTags.Append(item.Name + ","); } sbTagsCN.Length--; sbTags.Length--; sb.AppendLine("Tags:" + sbTags.ToString()); sb.AppendLine("标签:" + sbTagsCN.ToString()); sb.AppendLine("------------------"); sb.AppendLine("推理耗时:" + (dt2 - dt1).TotalMilliseconds + "ms"); textBox1.Text = sb.ToString(); button2.Enabled = true; } private void Form1_Load(object sender, EventArgs e) { model_path = "model/ram.onnx"; // 创建输出会话,用于输出模型读取信息 options = new SessionOptions(); options.LogSeverityLevel = OrtLoggingLevel.ORT_LOGGING_LEVEL_INFO; options.AppendExecutionProvider_CPU(0);// 设置为CPU上运行 // 创建推理模型类,读取本地模型文件 onnx_session = new InferenceSession(model_path, options);//model_path 为onnx模型文件的路径 // 创建输入容器 input_container = new List<NamedOnnxValue>(); image_path = "test_img/1.jpg"; pictureBox1.Image = new Bitmap(image_path); image = new Mat(image_path); string[] thresholdLines = File.ReadAllLines("model/ram_tag_list_threshold.txt"); string[] tagChineseLines = File.ReadAllLines("model/ram_tag_list_chinese.txt"); string[] tagLines = File.ReadAllLines("model/ram_tag_list.txt"); for (int i = 0; i < tagLines.Length; i++) { ltTag.Add(new Tag { NameCN = tagChineseLines[i], Name = tagLines[i], Threshold = double.Parse(thresholdLines[i]) }); } } } } 

下载

源码下载(带模型)

模型下载

onnxappstemivacpugithubcligittpumicrosoftcreateparsepngstable diffusionidewindows提示词diffusion
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-11392.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

谷歌发布“Vlogger”模型:单张图片生成10秒视频

上一篇

HPT官网体验入口 HyperGAI多模态语言开源模型框架免费使用地址

下一篇
  • 复制图片
按住ctrl可打开默认菜单