This commit is contained in:
USER002
2024-11-25 18:31:37 +09:00
parent a6a4f354c0
commit ef822e51fc
4 changed files with 179 additions and 48 deletions

View File

@@ -31,6 +31,7 @@
this.simpleButton_SetScanPoin = new DevExpress.XtraEditors.SimpleButton();
this.treeList1 = new DevExpress.XtraTreeList.TreeList();
this.simpleButton_ScanToOcr = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_KeyHookStart = new DevExpress.XtraEditors.SimpleButton();
((System.ComponentModel.ISupportInitialize)(this.treeList1)).BeginInit();
this.SuspendLayout();
//
@@ -47,6 +48,14 @@
//
this.treeList1.Location = new System.Drawing.Point(140, 12);
this.treeList1.Name = "treeList1";
this.treeList1.OptionsBehavior.ReadOnly = true;
this.treeList1.OptionsClipboard.AllowCopy = DevExpress.Utils.DefaultBoolean.True;
this.treeList1.OptionsClipboard.AllowExcelFormat = DevExpress.Utils.DefaultBoolean.True;
this.treeList1.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.False;
this.treeList1.OptionsScrollAnnotations.ShowSelectedRows = DevExpress.Utils.DefaultBoolean.True;
this.treeList1.OptionsView.ShowColumns = false;
this.treeList1.OptionsView.ShowIndicator = false;
this.treeList1.OptionsView.ShowRoot = false;
this.treeList1.Size = new System.Drawing.Size(577, 375);
this.treeList1.TabIndex = 1;
//
@@ -59,16 +68,28 @@
this.simpleButton_ScanToOcr.Text = "스캔영역설정";
this.simpleButton_ScanToOcr.Click += new System.EventHandler(this.simpleButton_SetScanPoin_Click);
//
// simpleButton_KeyHookStart
//
this.simpleButton_KeyHookStart.Location = new System.Drawing.Point(12, 163);
this.simpleButton_KeyHookStart.Name = "simpleButton_KeyHookStart";
this.simpleButton_KeyHookStart.Size = new System.Drawing.Size(104, 85);
this.simpleButton_KeyHookStart.TabIndex = 2;
this.simpleButton_KeyHookStart.Text = "Key Hook Start";
this.simpleButton_KeyHookStart.Click += new System.EventHandler(this.simpleButton_KeyHookStart_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(729, 399);
this.Controls.Add(this.simpleButton_KeyHookStart);
this.Controls.Add(this.treeList1);
this.Controls.Add(this.simpleButton_ScanToOcr);
this.Controls.Add(this.simpleButton_SetScanPoin);
this.Name = "MainForm";
this.Text = "Scan To Text";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Load += new System.EventHandler(this.MainForm_Load);
((System.ComponentModel.ISupportInitialize)(this.treeList1)).EndInit();
this.ResumeLayout(false);
@@ -79,6 +100,7 @@
private DevExpress.XtraEditors.SimpleButton simpleButton_SetScanPoin;
private DevExpress.XtraTreeList.TreeList treeList1;
private DevExpress.XtraEditors.SimpleButton simpleButton_ScanToOcr;
private DevExpress.XtraEditors.SimpleButton simpleButton_KeyHookStart;
}
}

View File

@@ -1,25 +1,44 @@
using DevExpress.Utils.Extensions;
using DevExpress.XtraPrinting.Native;
using DevExpress.XtraWaitForm;
using ScanToTextProgram.OCR;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ScanToTextProgram
{
public partial class MainForm : Form
{
DataTable dataTable = null;
Rectangle rectangle = new Rectangle();
OcrProcessor ocrProcessor = new OcrProcessor();
public MainForm()
{
InitializeComponent();
}
Rectangle rectangle = new Rectangle();
dataTable = new DataTable();
dataTable.Columns.Add("시가");
dataTable.Columns.Add("고가");
dataTable.Columns.Add("저가");
dataTable.Columns.Add("종가");
dataTable.Columns.Add("구름(상)");
dataTable.Columns.Add("구름(하)");
dataTable.Columns.Add("40_1(상)");
dataTable.Columns.Add("40_1(하)");
dataTable.Columns.Add("40_2(상)");
dataTable.Columns.Add("40_2(하)");
treeList1.DataSource = dataTable;
}
// 스캔 영역 설정
private void simpleButton_SetScanPoin_Click(object sender, EventArgs e)
@@ -28,18 +47,22 @@ namespace ScanToTextProgram
rectangle = screenCapture.SelectArea();
}
// 스캔 버튼 클릭
private void simpleButton_SetScanPoin_Click_1(object sender, EventArgs e)
{
scanToOcr();
}
// 설정된 영역에 따라 스캔하고 OCR 변경하기
public void scanToOcr()
{
var screenCapture = new ScreenCapture();
var selectedArea = rectangle;
var screenshot = screenCapture.CaptureScreen(selectedArea);
var ocrProcessor = new OcrProcessor();
string extractedText = ocrProcessor.ExtractTextFromImage(screenshot);
MessageBox.Show(extractedText);
var splitLine = extractedText.Split('\n');
var splitLine = extractedText.Split('\n').ToList();
var 시가 = 0.0;
var 고가 = 0.0;
@@ -52,31 +75,56 @@ namespace ScanToTextProgram
var _40_2_상 = 0.0;
var _40_2_하 = 0.0;
for (var i=0; i < splitLine.Length; i++)
for (var i = 0; i < splitLine.Count(); i++)
{
if(string.IsNullOrEmpty(splitLine[i])) continue;
var str1 = splitLine[i].Trim();
if (string.IsNullOrEmpty(str1)) splitLine.Remove(splitLine[i]);
}
for (var i = 0; i < splitLine.Count(); i++)
{
if (string.IsNullOrEmpty(splitLine[i])) continue;
var line = splitLine[i];
var test = "BTCUSDT - 1h 097,743.2 H97,824.3 L97,353.0 C97,669.6 -73.6 (~0.08%)";
// 시가, 고가, 저가, 종가
if(i==0)
if (i == 0)
{
var 시고저종s = line.Split(' ');
시가 = Convert.ToDouble(시고저종s[4].Remove(0, 1));
고가 = Convert.ToDouble(시고저종s[5].Remove(0, 1));
저가 = Convert.ToDouble(시고저종s[6].Remove(0, 1));
종가 = Convert.ToDouble(시고저종s[7].Remove(0, 1));
var cnt = 시고저종s.Count() - 1;
var str_시가 = 시고저종s[cnt - 5].Remove(0, 1);
var str_고가 = 시고저종s[cnt - 4];
var str_저가 = 시고저종s[cnt - 3].Remove(0, 1);
var str_종가 = 시고저종s[cnt - 2];
if (!str_시가.Contains('.')) str_시가 = str_시가.Insert(str_시가.Length - 1, ".");
if (!str_고가.Contains('.')) str_고가 = str_고가.Insert(str_고가.Length - 1, ".");
if (!str_저가.Contains('.')) str_저가 = str_저가.Insert(str_저가.Length - 1, ".");
if (!str_종가.Contains('.')) str_종가 = str_종가.Insert(str_종가.Length - 1, ".");
시가 = Convert.ToDouble(str_시가);
고가 = Convert.ToDouble(str_고가);
저가 = Convert.ToDouble(str_저가);
종가 = Convert.ToDouble(str_종가);
}
// 구름떼
else if(i == 1)
else if (i == 1)
{
var 구름떼s = line.Split(' ');
var data1 = Convert.ToDouble(구름떼s[3]);
var data2 = Convert.ToDouble(구름떼s[4]);
if(data1 > data2)
var str_data1 = 구름떼s[구름떼s.Count() - 1];
var str_data2 = 구름떼s[구름떼s.Count() - 2];
if (!str_data1.Contains('.')) str_data1 = str_data1.Insert(str_data1.Length - 1, ".");
if (!str_data2.Contains('.')) str_data2 = str_data2.Insert(str_data2.Length - 1, ".");
var data1 = Convert.ToDouble(str_data1);
var data2 = Convert.ToDouble(str_data2);
if (data1 > data2)
{
구름_상 = data1;
구름_하 = data2;
@@ -87,22 +135,76 @@ namespace ScanToTextProgram
구름_하 = data1;
}
}
//else if(i == )
else if (i == 2)
{
var 볼린저_40_2s = line.Split(' ');
var str_40_2_상 = 볼린저_40_2s[볼린저_40_2s.Count() - 2];
var str_40_2_하 = 볼린저_40_2s[볼린저_40_2s.Count() - 1];
if (!str_40_2_상.Contains('.')) str_40_2_상 =str_40_2_상.Insert(str_40_2_상.Length - 1, ".");
if (!str_40_2_하.Contains('.')) str_40_2_하 = str_40_2_하.Insert(str_40_2_하.Length - 1, ".");
_40_2_상 = Convert.ToDouble(str_40_2_상);
_40_2_하 = Convert.ToDouble(str_40_2_하);
}
else if (i == 3)
{
var 볼린저_40_1s = line.Split(' ');
var str_40_1_상 = 볼린저_40_1s[볼린저_40_1s.Count() - 2];
var str_40_1_하 = 볼린저_40_1s[볼린저_40_1s.Count() - 1];
if (!str_40_1_상.Contains('.')) str_40_1_상 = str_40_1_상.Insert(str_40_1_상.Length - 1, ".");
if (!str_40_1_하.Contains('.')) str_40_1_하 = str_40_1_하.Insert(str_40_1_하.Length - 1, ".");
_40_1_상 = Convert.ToDouble(str_40_1_상);
_40_1_하 = Convert.ToDouble(str_40_1_하);
}
else if (i == 4)
{
}
else if (i == 5)
{
}
else if (i == 6)
{
}
}
dataTable.Rows.Clear();
var row = dataTable.Rows.Add();
row["시가"] = Convert.ToDouble(시가);
row["고가"] = Convert.ToDouble(고가);
row["저가"] = Convert.ToDouble(저가);
row["종가"] = Convert.ToDouble(종가);
row["구름(상)"] = Convert.ToDouble(구름_상);
row["구름(하)"] = Convert.ToDouble(구름_하);
row["40_1(상)"] = Convert.ToDouble(_40_1_상);
row["40_1(하)"] = Convert.ToDouble(_40_1_하);
row["40_2(상)"] = Convert.ToDouble(_40_2_상);
row["40_2(하)"] = Convert.ToDouble(_40_2_하);
treeList1.DataSource = dataTable;
treeList1.RefreshDataSource();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
HookHandler.Unhook();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
DataTable dataTable = new DataTable();
dataTable.Columns.Add("시가");
dataTable.Columns.Add("고가");
dataTable.Columns.Add("저가");
dataTable.Columns.Add("종가");
dataTable.Columns.Add("구름(상)");
dataTable.Columns.Add("구름(하)");
dataTable.Columns.Add("40_1(상)");
dataTable.Columns.Add("40_1(하)");
dataTable.Columns.Add("40_2(상)");
dataTable.Columns.Add("40_2(하)");
private void simpleButton_KeyHookStart_Click(object sender, EventArgs e)
{
HookHandler.SetHook(this);
}
}
}

View File

@@ -8,23 +8,29 @@ using Tesseract;
namespace ScanToTextProgram.OCR
{
internal class OcrProcessor
public class OcrProcessor
{
public string ExtractTextFromImage(Bitmap image)
public string ocrPath = "D:\\tessdata-4.1.0";
TesseractEngine tesseractEngine;
public OcrProcessor()
{
// Tesseract OCR 초기화
tesseractEngine = new TesseractEngine(ocrPath, "eng", EngineMode.Default);
}
string ocrPath = "D:\\Download\\tessdata-4.1.0";
using (var engine = new TesseractEngine(ocrPath, "eng", EngineMode.Default))
public string ExtractTextFromImage(Bitmap image)
{
// 이미지를 텍스트로 변환
using (var pix = PixConverter.ToPix(image))
{
var result = engine.Process(pix);
var pix = PixConverter.ToPix(image);
tesseractEngine = new TesseractEngine(ocrPath, "eng", EngineMode.Default);
// 숫자와 점(.)만 인식하도록 설정
tesseractEngine.SetVariable("tessedit_char_whitelist", "0123456789., \n");
var result = tesseractEngine.Process(pix);
return result.GetText();
}
}
}
}
}

View File

@@ -62,6 +62,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="HookHandler.cs" />
<Compile Include="ScreenCapture.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>