我已经在这个项目上工作了几个月,我正在尝试使用OpenCVSharp将眼睛跟踪整合到Unity中.我已经设法让一切工作,包括实际跟踪瞳孔等,但我有内存泄漏.基本上在程序运行20-30秒后冻结并且控制台错误说"无法分配(这里插入数字)位".在查看程序运行期间的内存使用情况后,您可以看到它的使用情况稳步攀升,直至最大化然后崩溃.
现在我花了很长时间试图解决这个问题,并阅读了很多关于正确发布图像/存储等的帮助帖子.尽管事实上我正在这样做,但它似乎并未正确释放它们.我尝试使用垃圾收集器强制它回收内存,但这似乎也没有用.我只是对图像做了一些根本性的错误以及我如何回收它们?或者每帧都创建新图像(即使我正在释放它们)导致问题.
任何帮助将不胜感激.这是下面的代码,您可以忽略更新功能中的许多内容,因为它与实际跟踪部分和校准有关.我意识到代码非常混乱,抱歉!需要担心的主要部分是EyeDetection().
using UnityEngine;
using System.Collections;
using System;
using System.IO;
using OpenCvSharp;
using OpenCvSharp.Blob;
//using System.Xml;
//using System.Threading;
//using AForge;
//using OpenCvSharp.Extensions;
//using System.Windows.Media;
//using System.Windows.Media.Imaging;
public class CaptureScript2 : MonoBehaviour
{
//public GameObject planeObj;
public WebCamTexture webcamTexture; //Texture retrieved from the webcam
//public Texture2D texImage; //Texture to apply to plane
public string deviceName;
private int devId = 1;
private int imWidth = 800; //camera width
private int imHeight = 600; //camera height
private string errorMsg = "No errors …Run Code Online (Sandbox Code Playgroud) 我想显示与文件相关的图标.对于与普通桌面应用程序关联的文件类型,这不是问题,但仅适用于与(metro/modern)应用程序关联的文件类型.
如果文件类型与我正在使用的应用程序相关联AsParallel(),我只会获得默认的未知文件类型图标.为了澄清,我没有得到null或是一个空图标,而是显示空纸张的默认图标.没有AsParallel()我得到正确的图标.
我尝试了其他几种方法来获取图标,例如,SHGetFileInfo()或ExtractAssociatedIcon()通过dll直接调用.行为总是一样的.
示例:如果"Adobe Acrobat"是PDF文件的默认应用程序,则在这两种情况下都会获得正确的Adobe PDF图标.如果Windows 8或10中的内置(现代UI)应用程序"Reader"是默认应用程序,AsParallel()则应用时会显示未知文件类型图标.
XAML:
<Window x:Class="FileIconTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox x:Name="TxtFilename" Text="x:\somefile.pdf"/>
<Button Click="Button_Click">Go</Button>
<Image x:Name="TheIcon" Stretch="None"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
对应代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
var list = new List<string>();
list.Add(TxtFilename.Text);
var icons = list.AsParallel().Select(GetIcon); // problem with apps
// var icons = list.Select(GetIcon); // works always
TheIcon.Source = icons.First();
}
public static ImageSource GetIcon(string …Run Code Online (Sandbox Code Playgroud)