我是新來的stackoverflow,並希望我的問題是在正確的地方?如何根據不同的圖像位置做不同的動作(具有傳統外觀的數字書)
我準備做一本書看起來一樣紙的應用程序。所以我有本書所有頁面的圖像。
的問題是,當用戶點擊/上月底點的任何一句話水龍頭,對句子的一些細節出現(在另一種語言的句子,即翻譯)
像這樣的東西我想:
我想知道我怎麼能實現呢?比一本500頁的書的每一句可怕的東西更好!
我是新來的stackoverflow,並希望我的問題是在正確的地方?如何根據不同的圖像位置做不同的動作(具有傳統外觀的數字書)
我準備做一本書看起來一樣紙的應用程序。所以我有本書所有頁面的圖像。
的問題是,當用戶點擊/上月底點的任何一句話水龍頭,對句子的一些細節出現(在另一種語言的句子,即翻譯)
像這樣的東西我想:
我想知道我怎麼能實現呢?比一本500頁的書的每一句可怕的東西更好!
不完全是你一直期待的,但有一些線索。
除非你做了一些OCR識別/分割你的文字,我真的不知道你是如何從圖像檢測句子(如果我錯了,有人糾正我)以及它們突出顯示它們或提供視覺提示;所以我假設你會使用一些OCR和你的圖像。 (如果它不夠好返回字符/句子的區域,這樣可以提供視覺線索,並選擇相關的翻譯那句話)
在這裏,你有一些鏈接,這些都是免費使用OCR庫:
https://stackoverflow.com/questions/744966/any-open-source-c-sharp-ocr-library
當你完成OCR-ING你現在有你的書作爲一個字符串,你會想要把它分解:
MatchCollection matches = Regex.Matches(_text, @"[A-Z].*?\.");
string[] strings = matches.Cast<Match>().Select(s => s.Value).ToArray();
(正則表達式大致沒有那個任務,它需要一些調整,如處理段)
我的答案的其餘部分是不是你一直期待,我在這裏張貼反正因爲這是我在回答你的問題時創建的,所以你可能會發現將它放在你的位圖上是非常有用的。 因此可以隨意跳過它。我們可以爭論它的實用性,這裏有幾個關於你爲什麼喜歡它的論點:儘量少閱讀,因爲你可以設置字體大小,你可以在裏面搜索IMO是一個很棒的功能。
所以在這裏,它是:
我已經使用了FlowDocumentReader代表句子。在這裏,我使用了一個Run和一個工具提示,但是您可以使用一個可以打開某個網站的超鏈接。
IEnumerable<Paragraph> paragraphs = strings.Select(s => new Paragraph(new Run(s) {ToolTip = "Translated text"}));
document.Blocks.AddRange(paragraphs);
和相關的XAML:
<FlowDocumentReader>
<FlowDocumentReader.Document>
<FlowDocument x:Name="document" />
</FlowDocumentReader.Document>
</FlowDocumentReader>
結果:
編輯
這就是爲什麼我建議你使用OCR,以獲得區域的話,沒有別的。
(從http://www.pixel-technology.com/freeware/tessnet2/拍攝)
var tesseract = new Tesseract();
var bitmap = new Bitmap("snap00110.png");
List<Word> doOcr = tesseract.DoOCR(bitmap, new Rectangle(new Point(0, 0), bitmap.Size));
foreach (var word in doOcr)
{
var region = new Rectangle(word.Left, word.Top, word.Right - word.Left, word.Bottom - word.Top);
}
當你有話的地區,你將能夠實現你想要的。
注:我一直在嘗試圖書館,你可能不得不重建它,如果你在.NET 4.0下
merci @Aybe,我已經有整個人物,句子,甚至我知道他們在哪個頁面,所以我可以跳過OCRing ..主要問題是知道他們在網頁中的位置... +1 – user2490629
查看我的更新回答。 – Aybe
非常感謝你@Aybe – user2490629
你有一些例子嗎? – Daniel
@Daniel我編輯了這個問題 – user2490629
您的意思是說,您將每個頁面存儲爲位圖? – StaWho