日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv +数字识别

發布時間:2023/12/4 编程问答 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv +数字识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在很多場景需要使用的數字識別,比如銀行卡識別,以及車牌識別等,在AI領域有很多圖像識別算法,大多是居于opencv 或者谷歌開源的tesseract 識別.

由于公司業務需要,需要開發一個客戶端程序,同時需要在xp這種老古董的機子上運行,故研究了如下幾個數字識別方案,如果大家有更好的方案可以留言告知我,大家一起學習借鑒,不過需要支持XP系統,萬分感謝!

ocr 識別的不同選擇方案

?tesseract

?放棄:谷歌的開源tesseract ocr識別目前最新版本不支持xp系統

? ? ??云端ocr 識別接口(不適用)

?費用比較貴:?場景不同,我們的需求是可能毫秒級別就需要調用一次ocr 識別

? ? ??opencv

?概念:OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。

以上幾種ocr 識別比較,最后選擇了opencv 的方式進行ocr 數字識別,下面講解通過ocr識別的基本流程和算法.

opencv 數字識別流程及算法解析

要通過opencv 進行數字識別離不開訓練庫的支持,需要對目標圖片進行大量的訓練,才能做到精準的識別出目標數字;下面我會分別講解圖片訓練的過程及識別的過程.

opencv 識別算法原理

1.比如下面一張圖片,需要從中識別出正確的數字,需要對圖片進行灰度、二值化、腐蝕、膨脹、尋找數字輪廓、切割等一系列操作.

原圖

灰度化圖

二值化圖

尋找輪廓

識別后的結果圖

以上就是簡單的圖片進行灰度化、二值化、尋找數字輪廓得到的識別結果(==這是基于我之前訓練過的數字模型下得到的識別結果==) 有些圖片比較賦值,比如存在背景斜杠等的圖片則需要一定的腐蝕或者膨脹等處理,才能尋找到正確的數字輪廓.

上面的說到我這里使用的是opencv 圖像處理庫進行的ocr 識別,那我這里簡單介紹下C# 怎么使用opencv 圖像處理看;

為了在xp上能夠運行 我這里通過nuget 包引用了 OpenCvSharp-AnyCPU 第三方庫,它使用的是opencv 2410 版本,你們如果不考慮xp系統的情況下開源使用最新的版本,最新版本支持了更多的識別算法.

右擊你的個人項目,選擇“管理Nuget程序包”。在包管理器頁面中,點擊“瀏覽”選項,然后在搜索框中鍵入“OpenCvSharp-AnyCPU”。選擇最頂端的正確項目,并在右側詳情頁中點擊“安裝”,等待安裝完成即可。

以上的核心代碼如下:

private void runSimpleOCR(string pathName){//構造opcvOcr 庫,這里的是我單獨對opencv 庫進行的一次封裝,加載訓練庫模板var opencvOcr = new OpencvOcr($"{path}Template\\Traindata.xml", opencvOcrConfig: new OCR.Model.OpencvOcrConfig(){ErodeLevel = 2.5,ThresholdType = OpenCvSharp.ThresholdType.Binary,ZoomLevel = 2,});var img = new Bitmap(this.txbFilaName.Text);var mat = img.ToMat();//核心識別方法var str = opencvOcr.GetText(mat, isDebug: true);this.labContent.Content = str;}

opencvOcr 的核心代碼如下

#region?屬性const double Thresh = 80;const double ThresholdMaxVal = 255;const int _minHeight = 35;bool _isDebug = false;CvKNearest _cvKNearest = null;OpencvOcrConfig _config = new OpencvOcrConfig() { ZoomLevel = 2, ErodeLevel = 3 };#endregion/// <summary>/// 構造函數/// </summary>/// <param name="path">訓練庫完整路徑</param>/// <param name="opencvOcrConfig">OCR相關配置信息</param>public OpencvOcr(string path, OpencvOcrConfig opencvOcrConfig = null){if (string.IsNullOrEmpty(path))throw new ArgumentNullException("path is not null");if (opencvOcrConfig != null)_config = opencvOcrConfig;this.LoadKnearest(path);}/// <summary>/// 加載Knn 訓練庫模型/// </summary>/// <param name="dataPathFile"></param>/// <returns></returns>private CvKNearest LoadKnearest(string dataPathFile){if (_cvKNearest == null){using (var fs = new FileStorage(dataPathFile, FileStorageMode.Read)){var samples = fs["samples"].ReadMat();var responses = fs["responses"].ReadMat();this._cvKNearest = new CvKNearest();this._cvKNearest.Train(samples, responses);}}return _cvKNearest;}/// <summary>/// OCR 識別,僅僅只能識別單行數字 /// </summary>/// <param name="kNearest">訓練庫</param>/// <param name="path">要識別的圖片路徑</param>public override string GetText(Mat src, bool isDebug = false){this._isDebug = isDebug;#region 圖片處理var respMat = MatProcessing(src, isDebug);if (respMat == null)return "";#endregion#region 查找輪廓var sortRect = FindContours(respMat.FindContoursMat);#endregionreturn GetText(sortRect, respMat.ResourcMat, respMat.RoiResultMat);}/// <summary>/// 查找輪廓/// </summary>/// <param name="src"></param>/// <returns></returns>private List<Rect> FindContours(Mat src){try{#region 查找輪廓Point[][] contours;HierarchyIndex[] hierarchyIndexes;Cv2.FindContours(src,out contours,out hierarchyIndexes,mode: OpenCvSharp.ContourRetrieval.External,method: OpenCvSharp.ContourChain.ApproxSimple);if (contours.Length == 0)throw new NotSupportedException("Couldn't find any object in the image.");#endregion#region 單行排序(目前僅僅支持單行文字,多行文字順序可能不對,按照x坐標進行排序)var sortRect = GetSortRect(contours, hierarchyIndexes);sortRect = sortRect.OrderBy(item => item.X).ToList();#endregionreturn sortRect;}catch { }return null;}/// <summary>/// 獲得切割后的數量列表/// </summary>/// <param name="contours"></param>/// <param name="hierarchyIndex"></param>/// <returns></returns>private List<Rect> GetSortRect(Point[][] contours, HierarchyIndex[] hierarchyIndex){var sortRect = new List<Rect>();var _contourIndex = 0;while ((_contourIndex >= 0)){var contour = contours[_contourIndex];var boundingRect = Cv2.BoundingRect(contour); //Find bounding rect for each contoursortRect.Add(boundingRect);_contourIndex = hierarchyIndex[_contourIndex].Next;}return sortRect;}/// <summary>/// 是否放大/// </summary>/// <param name="src"></param>/// <returns></returns>private bool IsZoom(Mat src){if (src.Height <= _minHeight)return true;return false;}private List<EnumMatAlgorithmType> GetAlgoritmList(Mat src){var result = new List<EnumMatAlgorithmType>();var algorithm = this._config.Algorithm;#region 自定義的算法try{if (algorithm.Contains("|")){result = algorithm.Split('|').ToList().Select(item => (EnumMatAlgorithmType)Convert.ToInt32(item)).ToList();if (!IsZoom(src))result.Remove(EnumMatAlgorithmType.Zoom);return result;}}catch { }#endregion#region 默認算法if (IsZoom(src)){result.Add(EnumMatAlgorithmType.Zoom);}if (this._config.ThresholdType == ThresholdType.Binary){//result.Add(EnumMatAlgorithmType.Blur);result.Add(EnumMatAlgorithmType.Gray);result.Add(EnumMatAlgorithmType.Thresh);if (this._config.DilateLevel > 0)result.Add(EnumMatAlgorithmType.Dilate);result.Add(EnumMatAlgorithmType.Erode);return result;}//result.Add(EnumMatAlgorithmType.Blur);result.Add(EnumMatAlgorithmType.Gray);result.Add(EnumMatAlgorithmType.Thresh);if (this._config.DilateLevel > 0)result.Add(EnumMatAlgorithmType.Dilate);result.Add(EnumMatAlgorithmType.Erode);return result;#endregion}/// <summary>/// 對查找的輪廓數據進行訓練模型匹配,這里使用的是KNN 匹配算法/// </summary>private string GetText(List<Rect> sortRect, Mat source, Mat roiSource){var response = "";try{if ((sortRect?.Count ?? 0) <= 0)return response;var contourIndex = 0;using (var dst = new Mat(source.Rows, source.Cols, MatType.CV_8UC3, Scalar.All(0))){sortRect.ForEach(boundingRect =>{try{#region 繪制矩形if (this._isDebug){Cv2.Rectangle(source, new Point(boundingRect.X, boundingRect.Y),new Point(boundingRect.X + boundingRect.Width, boundingRect.Y + boundingRect.Height),new Scalar(0, 0, 255), 1);Cv2.Rectangle(roiSource, new Point(boundingRect.X, boundingRect.Y),new Point(boundingRect.X + boundingRect.Width, boundingRect.Y + boundingRect.Height),new Scalar(0, 0, 255), 1);}#endregion#region 單個ROIvar roi = roiSource.GetROI(boundingRect); //Crop the imageroi = roi.Compress();var result = roi.ConvertFloat();#endregion#region KNN 匹配var results = new Mat();var neighborResponses = new Mat();var dists = new Mat();var detectedClass = (int)this._cvKNearest.FindNearest(result, 1, results, neighborResponses, dists);var resultText = detectedClass.ToString(CultureInfo.InvariantCulture);#endregion#region 匹配var isDraw = false;if (detectedClass >= 0){response += detectedClass.ToString();isDraw = true;}if (detectedClass == -1 && !response.Contains(".")){response += ".";resultText = ".";isDraw = true;}#endregion#region 繪制及輸出切割信息庫try{//if (this._isDebug)//{Write(contourIndex, detectedClass, roi);//}}catch { }if (this._isDebug && isDraw){Cv2.PutText(dst, resultText, new Point(boundingRect.X, boundingRect.Y + boundingRect.Height), 0, 1, new Scalar(0, 255, 0), 2);}#endregionresult?.Dispose();results?.Dispose();neighborResponses?.Dispose();dists?.Dispose();contourIndex++;}catch (Exception ex){TextHelper.Error("GetText ex", ex);}});#region 調試模式顯示過程source.IsDebugShow("Segmented Source", this._isDebug);dst.IsDebugShow("Detected", this._isDebug);dst.IsDebugWaitKey(this._isDebug);dst.IsDebugImWrite("dest.jpg", this._isDebug);#endregion}}catch{throw;}finally{source?.Dispose();roiSource?.Dispose();}return response;}/// <summary>/// 圖片處理算法/// </summary>/// <param name="src"></param>/// <param name="isDebug"></param>/// <returns></returns>public ImageProcessModel MatProcessing(Mat src, bool isDebug = false){src.IsDebugShow("原圖", isDebug);var list = GetAlgoritmList(src);var resultMat = new Mat();src.CopyTo(resultMat);var isZoom = IsZoom(src);list?.ForEach(item =>{switch (item){case EnumMatAlgorithmType.Dilate:resultMat = resultMat.ToDilate(Convert.ToInt32(this._config.DilateLevel));resultMat.IsDebugShow(EnumMatAlgorithmType.Dilate.GetDescription(), isDebug);break;case EnumMatAlgorithmType.Erode:var eroderLevel = isZoom ? this._config.ErodeLevel * this._config.ZoomLevel : this._config.ErodeLevel;resultMat = resultMat.ToErode(eroderLevel);resultMat.IsDebugShow(EnumMatAlgorithmType.Erode.GetDescription(), isDebug);break;case EnumMatAlgorithmType.Gray:resultMat = resultMat.ToGrey();resultMat.IsDebugShow(EnumMatAlgorithmType.Gray.GetDescription(), isDebug);break;case EnumMatAlgorithmType.Thresh:var thresholdValue = this._config.ThresholdValue <= 0 ? resultMat.GetMeanThreshold() : this._config.ThresholdValue;resultMat = resultMat.ToThreshold(thresholdValue, thresholdType: this._config.ThresholdType);resultMat.IsDebugShow(EnumMatAlgorithmType.Thresh.GetDescription(), isDebug);break;case EnumMatAlgorithmType.Zoom:resultMat = resultMat.ToZoom(this._config.ZoomLevel);src = resultMat;resultMat.IsDebugShow(EnumMatAlgorithmType.Zoom.GetDescription(), isDebug);break;case EnumMatAlgorithmType.Blur:resultMat = resultMat.ToBlur();src = resultMat;resultMat.IsDebugShow(EnumMatAlgorithmType.Blur.GetDescription(), isDebug);break;}});var oldThreshImage = new Mat();resultMat.CopyTo(oldThreshImage);return new ImageProcessModel(){ResourcMat = src,FindContoursMat = oldThreshImage,RoiResultMat = resultMat};}

opencv 圖片處理開放出去的配置對象實體如下:

public class OpencvOcrConfig{/// <summary>/// 放大程度級別 默認2/// </summary>public double ZoomLevel { set; get; }/// <summary>/// 腐蝕級別 默認2.5/// </summary>public double ErodeLevel { set; get; }/// <summary>/// 膨脹/// </summary>public double DilateLevel { set; get; }/// <summary>/// 閥值/// </summary>public double ThresholdValue { set; get; }/// <summary>/// 圖片處理算法,用逗號隔開/// </summary>public string Algorithm { set; get; }/// <summary>/// 二值化方式/// </summary>public ThresholdType ThresholdType { set; get; } = ThresholdType.BinaryInv;/// <summary>/// 通道模式/// </summary>public OcrChannelTypeEnums ChannelType { set; get; } = OcrChannelTypeEnums.BlackBox;}

opencv 圖片處理算法擴展方法如下:

public static partial class OpenCvExtensions{private const int Thresh = 200;private const int ThresholdMaxVal = 255;/// <summary>/// Bitmap Convert Mat/// </summary>/// <param name="bitmap"></param>/// <returns></returns>public static Mat ToMat(this System.Drawing.Bitmap bitmap){return OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);}/// <summary>/// Bitmap Convert Mat/// </summary>/// <param name="bitmap"></param>/// <returns></returns>public static System.Drawing.Bitmap ToBitmap(this Mat mat){return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);}public static bool MatIsEqual(this Mat mat1, Mat mat2){try{if (mat1.Empty() && mat2.Empty()){return true;}if (mat1.Cols != mat2.Cols || mat1.Rows != mat2.Rows || mat1.Dims() != mat2.Dims() ||mat1.Channels() != mat2.Channels()){return false;}if (mat1.Size() != mat2.Size() || mat1.Type() != mat2.Type()){return false;}var nrOfElements1 = mat1.Total() * mat1.ElemSize();if (nrOfElements1 != mat2.Total() * mat2.ElemSize())return false;return MatPixelEqual(mat1, mat2);}catch (Exception ex){TextHelper.Error("MatIsEqual 異常", ex);return true;}}/// <summary>/// 灰度/// </summary>/// <param name="mat"></param>/// <returns></returns>public static Mat ToGrey(this Mat mat){try{Mat grey = new Mat();Cv2.CvtColor(mat, grey, OpenCvSharp.ColorConversion.BgraToGray);return grey;}catch{return mat;}}/// <summary>/// 二值化/// </summary>/// <param name="data"></param>/// <returns></returns>public static Mat ToThreshold(this Mat data, double threshValue = 0, ThresholdType thresholdType = ThresholdType.BinaryInv){Mat threshold = new Mat();if (threshValue == 0)threshValue = Thresh;Cv2.Threshold(data, threshold, threshValue, ThresholdMaxVal, thresholdType);if (threshold.IsBinaryInv()){Cv2.Threshold(threshold, threshold, threshValue, ThresholdMaxVal, ThresholdType.BinaryInv);}return threshold;}/// <summary>/// 是否調試顯示/// </summary>/// <param name="src"></param>/// <param name="name"></param>/// <param name="isDebug"></param>public static void IsDebugShow(this Mat src, string name, bool isDebug = false){if (!isDebug)return;Cv2.ImShow(name, src);}public static void IsDebugWaitKey(this Mat src, bool isDebug = false){if (!isDebug)return;Cv2.WaitKey();}public static void IsDebugImWrite(this Mat src, string path, bool isDebug = false){if (!isDebug)return;try{Cv2.ImWrite(path, src);}catch { }}/// <summary>/// Mat 轉成另外一種存儲矩陣方式/// </summary>/// <param name="roi"></param>/// <returns></returns>public static Mat ConvertFloat(this Mat roi){var resizedImage = new Mat();var resizedImageFloat = new Mat();Cv2.Resize(roi, resizedImage, new Size(10, 10)); //resize to 10X10resizedImage.ConvertTo(resizedImageFloat, MatType.CV_32FC1); //convert to floatvar result = resizedImageFloat.Reshape(1, 1);return result;}/// <summary>/// 腐蝕/// </summary>/// <param name="mat"></param>/// <returns></returns>public static Mat ToErode(this Mat mat, double level){#region?自動會判斷是否需要腐蝕if (level < 1){return mat;}#endregionvar erode = new Mat();var copyMat = new Mat();mat.CopyTo(copyMat);Cv2.Erode(mat, erode, Cv2.GetStructuringElement(StructuringElementShape.Ellipse, new Size(level, level)));return erode;}/// <summary>/// 膨脹/// </summary>/// <param name="mat"></param>/// <returns></returns>public static Mat ToDilate(this Mat mat, int level){if (level <= 0)return mat;var dilate = new Mat();Cv2.Dilate(mat, dilate, Cv2.GetStructuringElement(StructuringElementShape.Ellipse, new Size(level, level)));return dilate;}/// <summary>/// mat 轉Roi/// </summary>/// <param name="image"></param>/// <param name="boundingRect"></param>/// <returns></returns>public static Mat GetROI(this Mat image, Rect boundingRect){try{return new Mat(image, boundingRect); //Crop the image}catch{}return null;}/// <summary>/// 獲取平均閥值/// </summary>/// <param name="mat"></param>/// <returns></returns>public static int GetMeanThreshold(this Mat mat){var width = mat.Width;var height = mat.Height;var m = mat.Reshape(1, width * height);return (int)m.Sum() / (width * height);}/// <summary>/// 獲得二值化閥值/// </summary>/// <param name="bitmap"></param>/// <returns></returns>public static int GetMeanThreshold(this System.Drawing.Bitmap bitmap){using (var mat = bitmap.ToMat())using (var grap = mat.ToGrey()){return grap.GetMeanThreshold();}}public static bool IsErode(this System.Drawing.Bitmap bitmap){using (var mat = bitmap.ToMat())using (var grap = mat.ToGrey()){var thresholdValue = grap.GetMeanThreshold();using (var threshold = grap.ToThreshold(thresholdValue, ThresholdType.BinaryInv)){return threshold.IsErode();}}}/// <summary>/// 放大/// </summary>/// <param name="img"></param>/// <param name="times"></param>/// <returns></returns>public static Mat ToZoom(this Mat img, double times){if (times <= 0)return img;var width = img.Width * times;var height = img.Height * times;img = img.Resize(new Size(width, height), 0, 0, Interpolation.NearestNeighbor);return img;}/// <summary>/// 均值濾波/// </summary>/// <param name="img"></param>/// <returns></returns>public static Mat ToBlur(this Mat img){return img.Blur(new Size(3, 3));}public static Mat Compress(this Mat img){var width = 28.0 * img.Width / img.Height;var fWidth = width / img.Width;var?fHeight?=?28.0?/?img.Height;img = img.Resize(new Size(width, 28), fWidth, fHeight, Interpolation.NearestNeighbor);return img;}public static bool MatPixelEqual(this Mat src, Mat are){var width = src.Width;var height = src.Height;var sum = width * height;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){byte p = src.At<byte>(row, col); //獲對應矩陣坐標的取像素byte pAre = are.At<byte>(row, col);if (p != pAre)return false;}}return true;}public static int GetSumPixelCount(this Mat threshold){var width = threshold.Width;var height = threshold.Height;var sum = width * height;var value = 0;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){byte p = threshold.At<byte>(row, col); //獲對應矩陣坐標的取像素value++;}}return value;}public static int GetPixelCount(this Mat threshold, System.Drawing.Color color){var width = threshold.Width;var height = threshold.Height;var sum = width * height;var value = 0;for (int row = 0; row < height; row++){for (int col = 0; col < width; col++){byte p = threshold.At<byte>(row, col); //獲對應矩陣坐標的取像素if (Convert.ToInt32(p) == color.R){value++;}}}return value;}/// <summary>/// 是否需要二值化反轉/// </summary>/// <param name="threshold"></param>/// <returns></returns>public static bool IsBinaryInv(this Mat threshold){var width = threshold.Width;var height = threshold.Height;var sum = Convert.ToDouble(width * height);var black = GetPixelCount(threshold, System.Drawing.Color.Black);return (Convert.ToDouble(black) / sum) < 0.5;}/// <summary>/// 是否需要腐蝕/// </summary>/// <param name="mat"></param>/// <returns></returns>public static bool IsErode(this Mat mat){var percent = mat.GetPercent();return percent >= 0.20;}/// <summary>/// 獲得白色像素占比/// </summary>/// <param name="threshold"></param>/// <returns></returns>public static double GetPercent(this Mat threshold){var width = threshold.Width;var height = threshold.Height;var sum = Convert.ToDouble(width * height);var white = GetPixelCount(threshold, System.Drawing.Color.White);return (Convert.ToDouble(white) / sum);}/// <summary>/// 根據模板查找目標圖片的在原圖標中的開始位置坐標/// </summary>/// <param name="source"></param>/// <param name="template"></param>/// <param name="matchTemplateMethod"></param>/// <returns></returns>public static Point FindTemplate(this Mat source, Mat template, MatchTemplateMethod matchTemplateMethod = MatchTemplateMethod.SqDiffNormed){if (source == null)return new OpenCvSharp.CPlusPlus.Point();var result = new Mat();Cv2.MatchTemplate(source, template, result, matchTemplateMethod);Cv2.MinMaxLoc(result, out OpenCvSharp.CPlusPlus.Point minVal, out OpenCvSharp.CPlusPlus.Point maxVal);var topLeft = new OpenCvSharp.CPlusPlus.Point();if (matchTemplateMethod == MatchTemplateMethod.SqDiff || matchTemplateMethod == MatchTemplateMethod.SqDiffNormed){topLeft = minVal;}else{topLeft = maxVal;}return topLeft;}}

以上代碼中開源對圖片進行輪廓切割,同時會生成切割后的圖片代碼如下

#region 繪制及輸出切割信息庫try{Write(contourIndex, detectedClass, roi);}catch { } #endregionprivate void Write(int contourIndex, int detectedClass, Mat roi) {Task.Factory.StartNew(() =>{try{var templatePath = $"{AppDomain.CurrentDomain.BaseDirectory}template";FileHelper.CreateDirectory(templatePath);var templatePathFile = $"{templatePath}/{contourIndex}_{detectedClass.ToString()}.png";Cv2.ImWrite(templatePathFile, roi);if (!roi.IsDisposed){roi.Dispose();}}catch {}}); }

切割后的圖片如下:

這里我已經對數字進行切割好了,接下來就是需要對0-9 這些數字進行分類(建立文件夾進行數字歸類),如下:

圖中的每一個分類都是我事先切割好的數字圖片,圖中有-1 和-2 這兩個特殊分類,-1 里面我是放的是“.”好的分類,用于訓練“.”的圖片,這樣就可以識別出小數點的數字支持. -2 這個分類主要是其他一些無關緊要的圖片,也就是不是數字和點的都歸為這一類中.

現在訓練庫分類已經建立好了,接下來我們需要對這些分類數字進行歸一化處理,生成訓練模型. 代碼如下:

private void Button_Click_1(object sender, RoutedEventArgs e){var opencvOcr = new OpencvOcr($"{path}Template\\Traindata.xml", opencvOcrConfig: null);opencvOcr.Save($"{path}Template\\NumberWrite", outputPath: $"{path}Template\\Traindata.xml");MessageBox.Show("生成訓練庫成功");//var img = new Bitmap(this.txbFilaName.Text);//var str = opencvOcr.GetText(img.ToMat(), isDebug: true);//this.labContent.Content = str;}/// <summary>/// 保存訓練模型/// </summary>/// <param name="dataPath"></param>/// <param name="trainExt"></param>/// <param name="dataPathFile"></param>public void Save(string dataPath, string trainExt = "*.png", string outputPath = ""){if (string.IsNullOrEmpty(outputPath))throw new ArgumentNullException("save dataPath is not null");var trainingImages = this.ReadTrainingImages(dataPath, trainExt);var samples = GetSamples(trainingImages);var response = GetResponse(trainingImages);//寫入到訓練庫中using (var fs = new FileStorage(outputPath, FileStorageMode.WriteText)){fs.Write("samples", samples);fs.Write("responses", response);}}/// <summary>/// 根據目錄加載文件/// </summary>/// <param name="path"></param>/// <param name="ext"></param>/// <returns></returns>private IList<ImageInfo> ReadTrainingImages(string path, string ext){var images = new List<ImageInfo>();var imageId = 1;foreach (var dir in new DirectoryInfo(path).GetDirectories()){var groupId = int.Parse(dir.Name);foreach (var imageFile in dir.GetFiles(ext)){var srcMat = new Mat(imageFile.FullName, OpenCvSharp.LoadMode.GrayScale);var image = srcMat.ConvertFloat();if (image == null){continue;}images.Add(new ImageInfo{Image = image,ImageId = imageId++,ImageGroupId = groupId});}}return images;}/// <summary>/// Mat 轉成另外一種存儲矩陣方式/// </summary>/// <param name="roi"></param>/// <returns></returns>public static Mat ConvertFloat(this Mat roi){var resizedImage = new Mat();var resizedImageFloat = new Mat();Cv2.Resize(roi, resizedImage, new Size(10, 10)); //resize to 10X10resizedImage.ConvertTo(resizedImageFloat, MatType.CV_32FC1); //convert to floatvar result = resizedImageFloat.Reshape(1, 1);return result;}/// <summary>/// 獲取Samples/// </summary>/// <param name="trainingImages"></param>/// <returns></returns>private Mat GetSamples(IList<ImageInfo> trainingImages){var samples = new Mat();foreach (var trainingImage in trainingImages){samples.PushBack(trainingImage.Image);}return samples;}private Mat GetResponse(IList<ImageInfo> trainingImages){var labels = trainingImages.Select(x => x.ImageGroupId).ToArray();var responses = new Mat(labels.Length, 1, MatType.CV_32SC1, labels);var tmp = responses.Reshape(1, 1); //make continuousvar responseFloat = new Mat();tmp.ConvertTo(responseFloat, MatType.CV_32FC1); // Convert to floatreturn responses;}

到這里ocr 訓練模型以及建立好了,會在目錄中生成一個Traindata.xml 的訓練模型庫,我們來打開這個訓練模型庫文件探索它的神秘的容顏.

如果大家有更好的數字識別方案可以留言告知我,這樣可以更好的應用到實際場景中需求場景:

  • 客戶端調用,不走api方式

  • 必須要xp這種老爺機的支持

  • 總結

    以上是生活随笔為你收集整理的opencv +数字识别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产一级片免费观看 | 免费视频在线观看网站 | 一区二区视频在线播放 | 草莓视频在线观看免费观看 | 欧美高清视频不卡网 | 亚洲欧美日韩精品一区二区 | 亚洲精品久久久蜜桃 | 久久香蕉国产 | 久久高清av | 天天射天天操天天色 | 久久公开免费视频 | 99超碰在线播放 | 黄网站色欧美视频 | 久久午夜剧场 | 国产精品九九九九九九 | 成人一级免费电影 | 久久99欧美 | 9i看片成人免费看片 | 四虎在线永久免费观看 | 免费av片在线 | 欧美日韩精品影院 | 免费91在线观看 | 在线观看视频国产一区 | 日韩网站在线 | 麻豆精品传媒视频 | 91精品伦理 | 日韩激情久久 | 日本性生活一级片 | 日韩久久电影 | 欧美日韩性视频在线 | 99精品免费视频 | a级黄色片视频 | 丁香花在线视频观看免费 | 91日韩在线视频 | 日本在线观看中文字幕 | 伊人资源站 | 亚洲精品久久激情国产片 | 日韩在线第一 | av电影 一区二区 | 日韩免费电影一区二区三区 | 人人玩人人添人人澡超碰 | 免费看片日韩 | 99精彩视频在线观看免费 | 国产伦理一区二区三区 | 日本中文字幕视频 | 91精品视屏 | 亚洲精品影院在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 亚洲永久精品国产 | 成人av在线影院 | 亚洲国产精品视频在线观看 | 最新日本中文字幕 | 狠狠干综合 | 日韩在线精品视频 | 三级黄色免费片 | 色夜视频 | 超碰在线人人草 | 麻豆视频国产 | 成人在线播放av | 亚洲成人av在线电影 | 日韩精品不卡 | 国产亚洲精品久久久久秋 | 91丨九色丨丝袜 | 亚洲精品视频免费看 | 黄网站色成年免费观看 | 福利视频一区二区 | 亚洲精品黄 | 麻豆国产在线播放 | 一区二区三区四区五区在线 | 日本久久成人中文字幕电影 | 日韩国产高清在线 | 成人午夜电影在线 | 中文字幕有码在线 | 国产精品网在线观看 | www黄com| 久久1区 | av电影一区二区 | 成人免费视频网 | 亚洲不卡av一区二区三区 | 91精品推荐| 在线成人一区 | www.国产高清 | 久久66热这里只有精品 | 最近2019好看的中文字幕免费 | 成人影音在线 | 国产美女免费观看 | 久久综合影音 | 又爽又黄在线观看 | 91av视频导航 | 麻豆视频免费播放 | 91电影福利| 日韩一区精品 | 亚欧日韩成人h片 | 亚洲人xxx| 精品久久久久久国产偷窥 | 国产又黄又硬又爽 | 99久久99久久精品国产片 | 91精品国产九九九久久久亚洲 | 久久国产精品视频免费看 | 天天操天天怕 | 国产精品1区2区3区 久久免费视频7 | 久久综合国产伦精品免费 | 国产一区视频在线观看免费 | 久久久久久久久国产 | 麻豆一精品传二传媒短视频 | 特级黄色视频毛片 | 揉bbb玩bbb少妇bbb| 美女视频黄是免费的 | 久久久久免费精品国产 | 亚洲一区免费在线 | 欧美日韩中文字幕视频 | 欧洲一区二区三区精品 | 日韩久久一区 | 亚洲天堂色婷婷 | 久草男人天堂 | 国产91影院| 丝袜美腿亚洲 | 五月婷婷色播 | 国产精品1000 | 日本高清免费中文字幕 | 黄色三级在线 | 天天夜夜操 | 少妇高潮冒白浆 | 亚洲女欲精品久久久久久久18 | 国产精品xxxx18a99 | 日韩一级精品 | 麻豆国产露脸在线观看 | 欧美性成人 | 国产一级免费在线 | 久草久草在线 | 青春草免费在线视频 | 91视频传媒| 涩涩爱夜夜爱 | 92精品国产成人观看免费 | 国产在线综合视频 | 久久久精华网 | 久久视频6 | 国产色啪 | 人人澡澡人人 | 欧美精品一区二区在线播放 | 操老逼免费视频 | 黄色大片免费网站 | aaaaaa毛片| 丁香亚洲| 午夜三级福利 | 日本精品视频在线播放 | 国产精品久久久久久久久久久免费 | 91成人久久 | 免费国产ww | 久久短视频 | 国产在线精品二区 | 粉嫩av一区二区三区四区五区 | 九九免费在线观看视频 | 日韩精品在线免费播放 | 国产日产高清dvd碟片 | 色天天中文 | 99精品免费久久久久久久久日本 | 91夫妻自拍| 探花视频免费在线观看 | 成人免费网站视频 | 91免费网址 | 中文字幕专区高清在线观看 | 亚洲国产成人精品电影在线观看 | 国产精品自产拍 | 成人av播放 | 日韩精品久久久免费观看夜色 | 91精品入口 | 亚洲最新av在线网址 | 精品一区在线 | 国产精品美女久久久久久久 | 人人澡人人爽欧一区 | 麻豆视频免费网站 | 天天干,天天插 | 国产一级免费在线 | 在线免费观看av网站 | 午夜色站 | 免费日韩一区 | 日韩专区av | 啪一啪在线 | 国产亚洲精品久久19p | 五月激情站 | 亚洲久草在线 | 婷婷综合 | 免费看污黄网站 | 日韩电影精品 | 国产在线毛片 | 欧洲高潮三级做爰 | 五月婷香蕉久色在线看 | 国产h片在线观看 | 综合视频在线 | 天天操福利视频 | 日韩免费电影一区二区 | 黄色资源在线 | 欧美精品国产综合久久 | 国产日韩在线观看一区 | 亚洲黄网站| 最近高清中文字幕 | caobi视频 | 久久在线视频精品 | 免费在线色 | 9久久精品| 成人在线观看免费视频 | 日韩电影在线观看一区二区三区 | 午夜色性片 | 欧美激情视频一区 | av在线激情 | 日本最新高清不卡中文字幕 | 色九九视频| 亚洲精品国产品国语在线 | 色a网| 久久综合给合久久狠狠色 | 视频一区二区在线观看 | 超碰国产在线观看 | 日本深夜福利视频 | 五月婷婷丁香激情 | 亚洲无吗av | 国产一区二区三区高清播放 | 九九激情视频 | 欧美永久视频 | 国产免费不卡 | 久久免费视频播放 | 狠狠干狠狠插 | 午夜精品一区二区三区四区 | 精品国产精品一区二区夜夜嗨 | 日本韩国欧美在线观看 | 久久国语| 欧美视频二区 | 在线黄色国产电影 | 99热亚洲精品 | 国产v欧美 | 亚洲在线精品视频 | 韩国精品视频在线观看 | 亚洲一区二区三区在线看 | 在线视频久久 | 婷婷色婷婷| 亚洲视频在线免费观看 | www.成人久久 | 欧美久久电影 | 国产 亚洲 欧美 在线 | 又色又爽又黄高潮的免费视频 | 国产综合91 | 国产精品永久久久久久久久久 | 欧美激情视频一二三区 | 久久人人精品 | 人人看黄色 | 国产成人久久精品77777 | 欧美一级性生活片 | 久久久久久久久久久精 | 亚洲免费观看视频 | 1000部18岁以下禁看视频 | 国产视频97 | 欧美大片在线看免费观看 | 国产高清视频色在线www | 激情网在线视频 | 亚洲资源网 | 美女在线免费观看视频 | 欧美孕妇与黑人孕交 | 亚洲区另类春色综合小说 | 中文一二区 | 99精品免费久久久久久久久日本 | 国产精品毛片一区视频播不卡 | 亚洲视频在线看 | 国产午夜精品免费一区二区三区视频 | 色六月婷婷 | www国产精品com | 青青河边草免费直播 | 三日本三级少妇三级99 | 手机版av在线 | 免费在线观看毛片网站 | 一区免费观看 | 欧美a级免费视频 | 日日干夜夜草 | 亚洲欧美国产日韩在线观看 | 免费在线观看午夜视频 | 久久视频这里有久久精品视频11 | 亚洲国内在线 | 久久久久9999亚洲精品 | 色噜噜日韩精品一区二区三区视频 | 久久国产精品偷 | 日本爱爱免费 | 成片免费观看视频大全 | 狠狠色丁香婷婷综合最新地址 | 国产成人精品av久久 | 玖玖视频国产 | 欧美91在线 | 91av视频导航 | 国产精品美女视频网站 | 色91av| 国产精品国产亚洲精品看不卡15 | 综合黄色网 | 欧美一级性视频 | 男女激情免费网站 | 毛片的网址 | 中文字幕在线一区二区三区 | 99视频精品在线 | av一区二区三区在线播放 | 久草视频在线免费 | 国产精品白丝jk白祙 | 欧美性猛片, | 九色精品免费永久在线 | 在线观看免费中文字幕 | 国产永久免费观看 | 中文字幕一区二区三区乱码不卡 | 欧美另类xxx | 亚洲欧美视频在线观看 | 日韩精品在线免费播放 | 一二三区在线 | 狠狠色网| 欧美一区二区三区在线看 | 婷婷在线观看视频 | 日韩丝袜在线观看 | 成人国产精品久久久 | 日韩精品一区二区三区电影 | 99精品免费久久久久久久久 | 成人av教育| 久久久久久高潮国产精品视 | www.色国产 | 亚洲国产一区av | 91自拍视频在线观看 | 亚洲aⅴ在线观看 | 四虎国产精品成人免费影视 | 久久97超碰 | 99热在线观看免费 | 伊人五月在线 | 中文字幕免费国产精品 | 国产婷婷精品av在线 | 日韩视频一区二区三区 | 99麻豆久久久国产精品免费 | 91精品在线麻豆 | 婷婷午夜 | 中文字幕视频一区二区 | 国产在线观看你懂的 | 久久99精品国产麻豆婷婷 | 黄色在线观看污 | 中文字幕成人一区 | 亚洲国产精品一区二区久久hs | 91亚洲综合 | 国产一区视频在线观看免费 | 伊人在线视频 | 久久黄色影院 | 国产一区二区电影在线观看 | 欧美一级片 | 欧美日韩在线播放一区 | 亚洲国产网站 | 香蕉视频久久 | 国产精品99久久免费黑人 | 91九色九色| 久久精品美女视频网站 | 免费色av | 国产 精品 资源 | 精品国产一区二区三区在线 | 激情av一区二区 | 日韩a在线播放 | 九九免费在线视频 | 在线视频观看你懂的 | 在线观看免费黄视频 | 亚洲va在线va天堂va偷拍 | 九九热国产 | 天天艹天天 | 亚洲电影久久久 | 免费在线观看不卡av | 久久精品国产免费看久久精品 | 97热在线观看 | 国产不卡精品视频 | 国产分类视频 | 日韩欧美在线第一页 | 一区二区三区四区五区在线 | 国产香蕉97碰碰碰视频在线观看 | 欧美激情视频一二区 | 成人黄视频 | 国产色婷婷精品综合在线手机播放 | 色97在线 | 91亚洲狠狠婷婷综合久久久 | 国产黄色片一级三级 | 午夜久久美女 | 久在线观看 | 91精品国产91久久久久福利 | 精品久久久久久亚洲 | 亚洲激情六月 | 黄色片亚洲 | 国产在线观看免费观看 | www.夜夜爽| 狠狠躁日日躁狂躁夜夜躁av | 91桃色免费观看 | 色偷偷中文字幕 | 免费观看一区二区三区视频 | 欧美精品久久久久久久久久白贞 | 最近中文字幕完整视频高清1 | 日韩二区在线观看 | 狠狠躁天天躁综合网 | 三级av黄色| mm1313亚洲精品国产 | 人人看黄色 | 亚洲精品国精品久久99热一 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 中文字幕2021 | 成年人在线免费看 | 欧美日韩调教 | 久久人网 | 九九99| 色免费在线 | 国产成人精品一区二区在线观看 | 精品一二三区视频 | 欧美另类老妇 | 91超碰免费在线 | 成人av电影免费观看 | 日日夜夜狠狠干 | 欧美一级特黄高清视频 | 久久中文精品视频 | 国产999精品久久久影片官网 | 国产成人免费av电影 | 99视频黄| 日韩精选在线观看 | 久草精品视频在线观看 | 粉嫩av一区二区三区四区在线观看 | 国产高清精品在线 | 午夜久久影视 | 欧美激情综合网 | 国产精品久久电影观看 | 一级淫片在线观看 | 日韩视频在线观看视频 | 久久不射电影网 | 视频1区2区| 久久久久久欧美二区电影网 | 四虎在线免费观看 | 在线观看中文字幕 | 69亚洲视频 | 亚洲精品国偷自产在线99热 | 99视频偷窥在线精品国自产拍 | 在线只有精品 | 四虎成人精品永久免费av | 一区二区三区视频网站 | 天天爽夜夜爽人人爽一区二区 | 日韩网站免费观看 | 久99久在线| 中文字幕黄色网址 | 国产精品一区二区在线观看免费 | 97人人射 | 国产成人99av超碰超爽 | 久热色超碰 | 国产视频在线观看一区二区 | 99精品视频免费在线观看 | 91污在线观看| 四虎影视成人永久免费观看亚洲欧美 | 国产精品毛片一区二区 | 久久久久国产成人免费精品免费 | 国产精品自产拍在线观看中文 | 五月天久久婷 | 久久这里有精品 | 欧美精彩视频 | 精品福利视频在线观看 | 亚洲 欧洲 国产 日本 综合 | 国产精品久久久久久久久软件 | 欧美男同视频网站 | 国产人成看黄久久久久久久久 | 久久综合久久伊人 | 久免费| 97精品国产91久久久久久 | 最近高清中文字幕在线国语5 | 亚洲视频 一区 | 亚洲精品国偷拍自产在线观看 | 久久九九影视 | 免费看精品久久片 | 日韩高清无线码2023 | 精品久久久久国产免费第一页 | 天堂av在线网址 | 婷婷在线免费视频 | 韩国精品福利一区二区三区 | 毛片网在线 | 日韩激情在线视频 | 久久久精华网 | 亚洲欧洲日韩 | 国产无遮挡猛进猛出免费软件 | 中文字幕在线观看91 | 黄色网中文字幕 | 韩国av三级| 狠狠色免费 | 在线性视频日韩欧美 | 精品96久久久久久中文字幕无 | 国产精品中文字幕av | 99精品视频在线观看播放 | 久久免费视频在线观看 | 成人午夜电影在线播放 | 亚洲毛片在线观看. | 国产精品美女免费看 | 国内精品久久久久久久影视麻豆 | 色噜噜噜噜 | 99精品在线免费观看 | 99精品视频免费观看 | 日韩精品资源 | 丁香色婷 | 天堂久色 | 国产精品美女久久久久久久久久久 | 久久免费99精品久久久久久 | 啪啪动态视频 | 丝袜少妇在线 | 久久国产热 | 亚洲精品字幕在线 | 亚洲国产欧美一区二区三区丁香婷 | 精品国产伦一区二区三区观看方式 | 国内精品久久久久久久久 | 国产一级在线观看视频 | 日韩 精品 一区 国产 麻豆 | 亚洲精品国产第一综合99久久 | 国产精品视频999 | 国产探花视频在线播放 | 国产手机av在线 | 国产精品高清在线观看 | 伊人电影在线观看 | 亚洲在线免费视频 | 国产女教师精品久久av | 精久久久久 | 一区二区视频网站 | 999一区二区三区 | 一区二区三区四区影院 | 天天操网站 | 国产精品成 | 玖玖玖精品 | 亚洲精品大片www | 丁香花中文在线免费观看 | 日日夜夜婷婷 | 亚州性色| 在线视频观看成人 | 狠狠的操| 国产 色 | 极品美女被弄高潮视频网站 | 99免费精品| 亚洲高清久久久 | av中文国产 | av福利在线播放 | 狠狠操操操 | 亚洲手机av | 黄网站色成年免费观看 | 青青啪| 五月婷婷在线视频 | 黄色av免费 | 夜夜高潮夜夜爽国产伦精品 | 1024久久| 毛片基地黄久久久久久天堂 | 91免费高清观看 | 狠狠狠狠狠狠狠狠干 | 18久久久久久 | 亚洲国产网址 | 91精品区 | 亚洲午夜精品久久久久久久久久久久 | 国产精品自产拍在线观看中文 | 免费亚洲黄色 | 欧美色综合天天久久综合精品 | 精品久久久久久国产偷窥 | 超碰免费成人 | 日韩欧美在线综合网 | 亚洲第一色| 国产在线美女 | 久久激情综合网 | 在线不卡视频 | 三级视频日韩 | 亚洲精区二区三区四区麻豆 | 亚洲在线视频播放 | 最近中文字幕久久 | 丁香花在线视频观看免费 | 亚洲国产视频网站 | 欧美 另类 交 | 精品欧美一区二区精品久久 | 久久久精品国产一区二区 | 国产精品久久久一区二区三区网站 | 国产精品色在线 | 婷婷四房综合激情五月 | 91精品婷婷国产综合久久蝌蚪 | 国产精品自在欧美一区 | 成年免费在线视频 | 日韩在线观看视频免费 | 在线视频免费观看 | 婷婷久久五月天 | 狠狠的干狠狠的操 | 狠狠88综合久久久久综合网 | 天天曰视频 | 一区二区三区高清不卡 | 91麻豆精品国产91 | 亚洲精品永久免费视频 | 亚洲免费不卡 | 国产精品99精品 | 免费在线激情视频 | 三级毛片视频 | 色网站国产精品 | 久久综合成人网 | 贫乳av女优大全 | 成人精品久久久 | 天天色天天色天天色 | 久久精品99精品国产香蕉 | 成人在线一区二区三区 | 国产一级黄| 天天操天天操天天爽 | 91aaa在线观看| 激情xxxx| av在线电影免费观看 | 亚洲影视九九影院在线观看 | 丁香六月婷婷开心婷婷网 | 亚洲精品视频网站在线观看 | 欧美日韩一级久久久久久免费看 | 美女免费黄视频网站 | 成年人免费av | 中文在线免费看视频 | 国产福利一区在线观看 | 狠狠色狠狠色合久久伊人 | 国产小视频国产精品 | 成 人 黄 色 视频免费播放 | 免费看污网站 | 国产亚洲人 | 久草在线视频新 | 九九日九九操 | 狠狠色噜噜狠狠狠狠2022 | 欧亚日韩精品一区二区在线 | www.国产在线观看 | 91在线porny国产在线看 | 国内精品小视频 | 一区二区三区在线免费观看视频 | 免费视频xnxx com | 日韩视频中文字幕 | 91视频 - 88av| 久久久影院| 成人免费91 | 国产玖玖在线 | 亚洲爱爱视频 | 天天玩天天干 | 波多野结衣在线播放一区 | www国产精品com| 男女激情网址 | 国产精品久久久久久久久久久免费 | 亚洲天堂自拍视频 | 日本精品一区二区三区在线播放视频 | 国产专区欧美专区 | 97视频久久久 | 人人爱爱人人 | 手机av看片| 天天综合成人网 | www.久久久.com | 中文国产在线观看 | av中文在线影视 | 99精品国产免费久久久久久下载 | 日韩在线观看网站 | 国产一二三区在线观看 | v片在线播放 | 成人黄色片免费看 | 午夜精品久久久99热福利 | 国产精品乱码久久久久 | www.久久久.cum| 国产亚洲精品久久久久久移动网络 | 国内精品久久久久影院一蜜桃 | www.色婷婷 | 91黄色小网站 | 欧美一级小视频 | 国产中文字幕大全 | 99精品视频在线观看免费 | 日本黄色黄网站 | 精品国产伦一区二区三区观看说明 | 免费高清在线视频一区· | 波多野结衣在线视频一区 | 天天草天天干 | 国产成人久 | 国产免费叼嘿网站免费 | 日色在线视频 | 免费看三级网站 | 日韩av免费观看网站 | 视频91 | 日日干干夜夜 | 国产高清不卡av | 色av婷婷 | 在线免费高清视频 | 99久久精品久久久久久动态片 | 精品久久久网 | 免费日韩 | 亚洲激情校园春色 | 黄色片网站大全 | 人人干人人做 | 亚洲精品一区二区三区高潮 | 亚洲精品456在线播放第一页 | 成人在线一区二区 | 中文字幕在线观看不卡 | 中文字幕在线影院 | 国产精品私拍 | 婷婷丁香激情网 | 在线看片一区 | 九九在线精品视频 | 免费观看91 | 精品国产欧美一区二区 | 国产网站色 | 日韩欧美在线视频一区二区三区 | 中文字幕免费观看 | 高清国产一区 | 日本中文字幕在线播放 | 夜色成人av | 色播五月激情五月 | 人人澡人人爽欧一区 | 又紧又大又爽精品一区二区 | 欧美一级免费高清 | 狠狠操操操 | 很黄很污的视频网站 | 国产一级视频在线免费观看 | 国产一级视频在线免费观看 | 一级理论片在线观看 | 免费成人短视频 | 人人插人人爱 | 久草网首页 | 国产成人精品一区二区三区在线 | 精品国产午夜 | 亚洲最新视频在线 | 精品麻豆入口免费 | 久久国产电影院 | 丁香激情网 | 日韩理论在线 | 国产精品岛国久久久久久久久红粉 | 色综合久久久久网 | 91色在线观看视频 | 天天综合久久 | 黄色视屏免费在线观看 | 国内精品久久久久久久久久久 | 免费观看十分钟 | 精品国产一区二区三区在线 | 日韩一二三 | 国产无套精品久久久久久 | 国产很黄很色的视频 | 最近免费中文字幕 | 91在线视频观看 | 91精品夜夜| 精品色999| 亚洲精品综合一区二区 | 欧美色精品天天在线观看视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品免费久久久久久久久久中文 | 国产成人精品一区一区一区 | 久久一精品 | 亚洲九九九在线观看 | 亚洲涩涩网 | 91av中文 | 四虎在线观看网址 | 91在线小视频| 9色在线视频 | 国产黄色一级片 | 久久av网址| 又黄又刺激的网站 | 国产成人免费精品 | 2019国产精品 | 亚洲每日更新 | 久久在线电影 | 国产一卡二卡四卡国 | 欧美日韩免费一区二区三区 | 久久久久久片 | 精品国产一区二区三区久久久蜜月 | 天天摸夜夜操 | 久久天天躁夜夜躁狠狠85麻豆 | 亚洲欧美偷拍另类 | 69国产盗摄一区二区三区五区 | 最近高清中文在线字幕在线观看 | av高清影院 | 在线高清av | 日韩精品欧美专区 | 欧美永久视频 | 久久久毛片 | 在线视频观看成人 | av一区二区在线观看中文字幕 | 久久一区二区三区日韩 | 免费观看av网站 | 免费高清男女打扑克视频 | 黄色小说在线免费观看 | 成 人 黄 色 免费播放 | 亚洲资源在线网 | 国产欧美精品一区二区三区四区 | 成人免费共享视频 | 午夜婷婷在线播放 | 黄色网www | 人人爽人人| 欧美日韩国产二区 | 激情文学综合丁香 | 亚洲免费在线观看视频 | 五月婷婷久久丁香 | 特级西西444www大精品视频免费看 | 国产精品永久免费视频 | 丝袜美腿在线 | 97电影手机版| 日韩综合精品 | 天天想夜夜操 | 亚洲一区不卡视频 | 国产成年免费视频 | 欧美ⅹxxxxxx | 欧美激情亚洲综合 | 国产无区一区二区三麻豆 | 久久一区二 | 99精品国产aⅴ | 国产在线视频一区二区 | 青青视频一区 | 四虎影视欧美 | 日韩精品视频免费专区在线播放 | 国产一级片免费视频 | 五月婷婷欧美 | 亚洲男男gaygay无套同网址 | 亚洲一区二区视频 | 成人中文字幕av | 国产丝袜制服在线 | 午夜久久久久久久久久影院 | 国产亚洲亚洲 | 成全在线视频免费观看 | 精品国产免费久久 | 亚洲综合在 | 国产手机av| 精品99视频 | 国产黄色观看 | 色诱亚洲精品久久久久久 | 久久国产热视频 | 国产 欧美 日本 | 欧美一级久久 | 国产一级免费电影 | 丁香激情综合久久伊人久久 | 国产粉嫩在线观看 | 日韩在线视频免费看 | 夜夜骑日日| 国产精品久久久久av免费 | 91精品伦理 | 中文字幕麻豆 | 日韩精品在线免费观看 | 天天插天天狠天天透 | 成人在线视频网 | 国产亚洲婷婷免费 | 国产日韩三级 | 黄色国产高清 | 日韩午夜剧场 | 午夜av免费看 | 在线 日韩 av| 天天艹天天爽 | 日韩免费观看av | 欧美日韩国产亚洲乱码字幕 | 四虎影视久久久 | 亚洲国产欧美在线人成大黄瓜 | 国产91精品一区二区绿帽 | 久久综合九色九九 | 久草精品免费 | 成人网444ppp| 国产在线观看,日本 | 亚洲婷婷综合色高清在线 | 综合色在线 | 久久视频精品在线 | 成人黄色免费观看 | 久久婷婷影视 | av网站免费在线 | 亚洲女在线| 99久国产 | 特级a毛片| 五月天综合激情 | 色婷婷精品 | 国产99一区 | 欧美日韩国产成人 | 久久97精品 | 成年人视频免费在线播放 | 超碰97网站 | 精品在线小视频 | 丝袜美腿av| 欧美在线99 | 日本视频精品 | 亚洲va天堂va欧美ⅴa在线 | 人人爽人人看 | 青青河边草观看完整版高清 | 日韩成人免费电影 | 欧美日韩国产一区二区三区在线观看 | 日本不卡一区二区三区在线观看 | 日韩精品视频免费在线观看 | 97在线观看免费观看高清 | 欧洲激情综合 | 国产精品一区二区三区电影 | 国产中文字幕视频 | 热re99久久精品国产99热 | 麻豆免费在线播放 | 青青久视频 | 免费精品视频在线观看 | 国产免费观看久久 | 欧美色道| 91在线精品秘密一区二区 | 97精产国品一二三产区在线 | 日本爱爱免费 | 综合精品久久久 | 在线黄色国产 | 欧美一区二区三区在线观看 | 成人免费视频播放 | av噜噜噜在线播放 | 日韩一区二区三区高清在线观看 | 欧美在线资源 | 精品视频国产一区 | 久草在线免费电影 | 丁香婷婷综合网 | 狠狠色伊人亚洲综合网站色 | 狠狠久久 | 亚洲春色奇米影视 | 国产精品www | av免费在线看网站 | 国产专区免费 | 日韩av电影一区 | 成人av一级片 | 色噜噜在线观看视频 | 日韩av午夜在线观看 | 国产不卡一区二区视频 | 久久免费看av | 精品国产一区二区三区男人吃奶 | 7777xxxx| 久久精品视频4 | 国产精品久久久久9999 | 国产色妞影院wwwxxx | 夜夜婷婷 | 午夜123 | 亚洲精品午夜久久久久久久 | aaa亚洲精品一二三区 | 一级免费黄视频 | 二区视频在线观看 | 91手机视频 | 中文一区二区三区在线观看 | 97网| 五月天免费网站 | 亚洲91中文字幕无线码三区 | 国产精品网址在线观看 | 国产v在线 | 天天综合入口 | 久久精品日产第一区二区三区乱码 | 久久久国产精品成人免费 | 久久精品超碰 | 国产精品欧美一区二区三区不卡 | 蜜臀av性久久久久蜜臀av | 国产中文 | 日韩手机在线观看 | 97香蕉久久国产在线观看 | 亚洲精品影视 | 婷婷综合亚洲 | 探花视频在线观看+在线播放 | 欧美乱码精品一区 | 一区在线观看 | 99精品免费久久久久久日本 | 视频91| 色久综合 | 亚州精品国产 | 亚洲欧美视屏 | 中文字幕a∨在线乱码免费看 | 美女黄网站视频免费 | 碰超在线观看 | 久久精品电影院 | 国产精品精品国产婷婷这里av | 最新在线你懂的 | 在线观看亚洲 | 五月婷婷香蕉 | 久草影视在线 | 亚洲精品小视频 | 超碰人人超碰 | 久久婷婷色 | 国产精品成人免费精品自在线观看 | 一区二区三区四区不卡 | 狠狠色丁香久久婷婷综 | 天堂视频中文在线 | 不卡av在线播放 | 国产精久久 | 在线激情av电影 | 国产免费观看高清完整版 | 色综合久久88色综合天天人守婷 | 成人久久影院 | 国产成人av电影在线观看 | 亚洲91精品| 久久人人爽人人爽人人片av软件 | 少妇bbbb | 亚洲精品乱码久久久久久蜜桃欧美 | 国产片网站 | 国产亚洲一区二区在线观看 | 久久久久成人精品亚洲国产 | www.在线观看视频 | 国产不卡精品 | 亚洲欧洲国产精品 | 婷婷在线视频观看 | 国产精品久久久久久久久久久免费看 | 亚洲欧洲国产视频 | 久久久精品在线观看 | 国产成人一级 | 天天综合网天天 | aaa毛片视频| 日韩黄色免费 | 免费看片成人 | a亚洲视频 | 色综合五月 | 波多野结衣一区二区三区中文字幕 | 91av美女| 99精品国产福利在线观看免费 | 欧美日韩在线观看不卡 | 国产91精品一区二区麻豆亚洲 | 欧美污网站 | 美女av免费看 | 成人黄性视频 | 日韩在线精品 | 亚洲精品美女久久17c | www.夜夜操.com | 久久国产精品一区二区 | 成人黄色小说视频 | 日本黄色免费播放 | 日韩成人在线一区二区 | 久久免费黄色大片 | www.伊人网 | av成人在线看 |