From dfb7041746789e4159936e92a4fccd9b063218d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A7=89?= Date: Fri, 1 Dec 2023 02:33:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo.ipynb | 154 ----------------------------------------------------- demo.py | 21 -------- main.py | 124 +++++++++++++++--------------------------- x.jpg | Bin 62018 -> 0 bytes 4 files changed, 43 insertions(+), 256 deletions(-) delete mode 100644 demo.ipynb delete mode 100644 demo.py delete mode 100644 x.jpg diff --git a/demo.ipynb b/demo.ipynb deleted file mode 100644 index 5e9844d..0000000 --- a/demo.ipynb +++ /dev/null @@ -1,154 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[{'id': 0, 'list': [{'text': 'O5U7TQK939', 'xywh': [9, 5, 9, 10]}, {'text': 'CSDR7VUTPG', 'xywh': [3, 9, 10, 9]}, {'text': 'SU4V44QZFH', 'xywh': [2, 6, 4, 4]}, {'text': 'OM2CNFD1K4', 'xywh': [5, 9, 6, 10]}, {'text': 'IV2M8DSCU8', 'xywh': [4, 2, 10, 7]}, {'text': 'A1QLXTAM9E', 'xywh': [2, 2, 4, 5]}, {'text': '0BB746F3KR', 'xywh': [2, 8, 9, 9]}, {'text': 'VX5C2DTUK0', 'xywh': [4, 1, 5, 0]}, {'text': '99R91CHWQH', 'xywh': [8, 2, 7, 6]}, {'text': 'GPSZH1F1EJ', 'xywh': [9, 0, 1, 9]}]}, {'id': 1, 'list': [{'text': 'JGHHC85B7S', 'xywh': [5, 1, 2, 1]}, {'text': 'RDW9CP14DQ', 'xywh': [3, 6, 4, 7]}, {'text': 'UU7HVLJ34K', 'xywh': [10, 4, 2, 5]}, {'text': '1UOY8BBH8C', 'xywh': [1, 8, 2, 9]}, {'text': '6C832LNW83', 'xywh': [6, 5, 7, 8]}, {'text': 'T7VT80L3SQ', 'xywh': [1, 1, 9, 0]}, {'text': 'J04KPQG7N2', 'xywh': [9, 7, 10, 10]}, {'text': 'TWXYGJDRUY', 'xywh': [2, 7, 4, 7]}, {'text': 'T50TTFOC0Q', 'xywh': [2, 5, 2, 1]}, {'text': 'ZNCJBIMYCC', 'xywh': [8, 6, 8, 3]}]}, {'id': 2, 'list': [{'text': 'K74PJ2YA8M', 'xywh': [7, 0, 7, 2]}, {'text': 'PRBXH5UC5R', 'xywh': [2, 10, 7, 3]}, {'text': 'N4YS5UJ214', 'xywh': [2, 1, 9, 4]}, {'text': 'NBAJLP2Z5U', 'xywh': [9, 1, 10, 0]}, {'text': '9LKGLH9V3A', 'xywh': [1, 0, 3, 1]}, {'text': 'EWJJ4V5SPL', 'xywh': [8, 0, 7, 9]}, {'text': '1MI3ZX58OG', 'xywh': [8, 1, 8, 4]}, {'text': 'WI2P0RBM4W', 'xywh': [5, 1, 6, 5]}, {'text': 'CU3UWAI4IV', 'xywh': [1, 8, 10, 10]}, {'text': 'DXK4ZUYM6C', 'xywh': [0, 10, 3, 3]}]}, {'id': 3, 'list': [{'text': 'KX0WNNTDUB', 'xywh': [5, 7, 5, 9]}, {'text': '3XYEVIFTB9', 'xywh': [1, 9, 6, 1]}, {'text': '8175P4NRKI', 'xywh': [4, 3, 4, 3]}, {'text': 'WWZ7T93NH2', 'xywh': [8, 10, 10, 1]}, {'text': '7SASCLCQTD', 'xywh': [2, 1, 0, 6]}, {'text': 'KJHMDGNYLT', 'xywh': [8, 7, 0, 2]}, {'text': 'S0Z0OP6LG0', 'xywh': [6, 8, 5, 1]}, {'text': '2K45XQ74HA', 'xywh': [2, 10, 10, 5]}, {'text': 'FE1T408C5C', 'xywh': [10, 9, 5, 8]}, {'text': 'F5B4QES2ZD', 'xywh': [9, 10, 0, 10]}]}, {'id': 4, 'list': [{'text': 'VQW9253WAK', 'xywh': [7, 1, 1, 5]}, {'text': 'QC2JGP5H8W', 'xywh': [5, 6, 7, 3]}, {'text': '1MV4MPWVA2', 'xywh': [2, 6, 5, 1]}, {'text': 'MYBZXEIY2M', 'xywh': [10, 2, 7, 4]}, {'text': 'B5FPS1Y5QD', 'xywh': [4, 2, 2, 1]}, {'text': 'VUNRLE9Y7K', 'xywh': [9, 1, 6, 6]}, {'text': 'IZ4XLRTT0G', 'xywh': [4, 1, 7, 0]}, {'text': '0OIA0BKV3K', 'xywh': [5, 2, 9, 8]}, {'text': '8HYATQ9DFN', 'xywh': [0, 10, 8, 8]}, {'text': 'YQ4A2J7HG5', 'xywh': [3, 0, 3, 5]}]}, {'id': 5, 'list': [{'text': '94SAIMPTRW', 'xywh': [5, 6, 8, 8]}, {'text': '5CQ7T02S5N', 'xywh': [7, 6, 7, 6]}, {'text': '51OACCWNVH', 'xywh': [8, 9, 1, 4]}, {'text': 'FBNVBQ91BI', 'xywh': [5, 0, 2, 0]}, {'text': 'DA5LLJMJ0R', 'xywh': [2, 8, 10, 9]}, {'text': 'ZH7T7UEUJK', 'xywh': [10, 6, 3, 6]}, {'text': 'DRX3MSMXKK', 'xywh': [9, 10, 0, 1]}, {'text': '07T15S11IW', 'xywh': [9, 3, 9, 5]}, {'text': 'PCWWF7TF88', 'xywh': [4, 10, 1, 7]}, {'text': 'EOWE3G4CIK', 'xywh': [2, 6, 7, 3]}]}, {'id': 6, 'list': [{'text': 'AG0F83XSYY', 'xywh': [3, 5, 1, 3]}, {'text': 'QDBZGIBITF', 'xywh': [3, 3, 10, 1]}, {'text': 'DUZ4072HJM', 'xywh': [3, 10, 5, 6]}, {'text': 'J4AU0W0612', 'xywh': [2, 6, 6, 6]}, {'text': 'U8T1T9K6HW', 'xywh': [4, 10, 5, 1]}, {'text': 'FC078A5VCL', 'xywh': [9, 4, 1, 1]}, {'text': 'IJYAML9F4C', 'xywh': [2, 9, 5, 0]}, {'text': '8QHX8K2872', 'xywh': [9, 8, 10, 10]}, {'text': 'CZDIQ5YPKD', 'xywh': [7, 4, 4, 2]}, {'text': 'UYBVUK20T5', 'xywh': [5, 0, 5, 0]}]}, {'id': 7, 'list': [{'text': 'C4FBFY5S7H', 'xywh': [3, 4, 7, 2]}, {'text': '3G9CY618CL', 'xywh': [5, 7, 2, 1]}, {'text': '8DJMO7R8W1', 'xywh': [1, 5, 1, 3]}, {'text': 'XNZFVDQAMN', 'xywh': [5, 1, 2, 2]}, {'text': '8VV3A0E5HT', 'xywh': [3, 2, 6, 2]}, {'text': 'U5BVGN8TK1', 'xywh': [1, 6, 1, 9]}, {'text': '87V0U64T0H', 'xywh': [1, 2, 7, 9]}, {'text': 'S8PMKTPG50', 'xywh': [1, 2, 5, 4]}, {'text': 'DXINY9FJP0', 'xywh': [1, 3, 6, 9]}, {'text': '4VHG2VJKV2', 'xywh': [2, 9, 6, 9]}]}, {'id': 8, 'list': [{'text': 'CD9AMIPLWN', 'xywh': [2, 7, 1, 9]}, {'text': '5KQHUK2LRQ', 'xywh': [6, 2, 8, 9]}, {'text': 'UYJ2ASBDGF', 'xywh': [3, 9, 10, 10]}, {'text': '3UHYDKWENL', 'xywh': [3, 8, 8, 4]}, {'text': 'FPBGA0MA0D', 'xywh': [3, 9, 3, 1]}, {'text': '0SLSZA9TIU', 'xywh': [9, 8, 2, 1]}, {'text': '56O8MVARB6', 'xywh': [1, 5, 6, 4]}, {'text': 'JMAD5N8DEU', 'xywh': [5, 6, 6, 4]}, {'text': 'XSILUMSLM2', 'xywh': [10, 3, 4, 3]}, {'text': '8MV5CHORRX', 'xywh': [2, 5, 6, 2]}]}, {'id': 9, 'list': [{'text': 'QMEM059TUQ', 'xywh': [9, 8, 10, 6]}, {'text': '1027VBNYJ5', 'xywh': [2, 7, 5, 6]}, {'text': 'Y5XQ4KX0S7', 'xywh': [2, 3, 3, 3]}, {'text': 'JHCUFM3QFK', 'xywh': [3, 7, 2, 8]}, {'text': 'EKPJS33CA5', 'xywh': [10, 8, 5, 5]}, {'text': 'EYTH8YRM0K', 'xywh': [4, 7, 4, 7]}, {'text': 'TZK4M8ZCRC', 'xywh': [10, 4, 10, 10]}, {'text': 'FW51VCOR9R', 'xywh': [8, 10, 8, 5]}, {'text': 'GI10U2T2E0', 'xywh': [7, 0, 0, 10]}, {'text': 'KY9X6OA9P8', 'xywh': [7, 7, 4, 7]}]}]\n" - ] - } - ], - "source": [ - "# 生成数据, 格式如下:\n", - "# [{id: 1, list: [{text:'a', xywh:[1,2,3,4]}, {text:'b', xywh:[1,2,3,4]}]}]\n", - "def create_data(num=100):\n", - " import random\n", - " import string\n", - " data = []\n", - " for i in range(num):\n", - " data.append({\n", - " 'id': i,\n", - " 'list': [{\n", - " 'text': ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)),\n", - " 'xywh': [random.randint(0, num) for _ in range(4)]\n", - " } for _ in range(10)]\n", - " })\n", - " return data\n", - "\n", - "dataset = create_data(10)\n", - "print(dataset)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/satori/ocr/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/__init__.py:397: SecurityWarning: Connecting to 'https://47.102.112.57:9200' using TLS with verify_certs=False is insecure\n", - " _transport = transport_class(\n" - ] - } - ], - "source": [ - "import warnings\n", - "from urllib3.exceptions import InsecureRequestWarning\n", - "warnings.simplefilter('ignore', InsecureRequestWarning)\n", - "\n", - "import json\n", - "from elasticsearch import Elasticsearch\n", - "es = Elasticsearch(\"https://47.102.112.57:9200\", basic_auth=(\"elastic\", \"password\"), verify_certs=False)\n", - "es.indices.delete(index='my_index')\n", - "es.indices.create(index='my_index')\n", - "\n", - "dataset = [{'id': 587, 'content': '[{\"text\": \"福利\", \"score\": 0, \"position\": [[61, 21], [90, 21], [90, 38], [61, 38]]}, {\"text\": \"33.3万\", \"score\": 0, \"position\": [[579, 25], [633, 25], [633, 41], [579, 41]]}, {\"text\": \"2875万\", \"score\": 0, \"position\": [[733, 25], [794, 25], [794, 40], [733, 40]]}, {\"text\": \"好看视频\", \"score\": 0, \"position\": [[925, 30], [1091, 25], [1093, 65], [926, 70]]}, {\"text\": \"勇土领取了首次值第三天的奖励,得了经典坐\", \"score\": 0, \"position\": [[352, 82], [710, 82], [710, 102], [352, 102]]}, {\"text\": \"累计到\", \"score\": 0, \"position\": [[842, 74], [908, 70], [909, 92], [843, 95]]}, {\"text\": \"@搞事丸\", \"score\": 0, \"position\": [[985, 79], [1087, 82], [1086, 108], [984, 104]]}, {\"text\": \"最强\", \"score\": 0, \"position\": [[176, 119], [243, 119], [243, 139], [176, 139]]}, {\"text\": \"第1天\", \"score\": 0, \"position\": [[362, 150], [401, 150], [401, 166], [362, 166]]}, {\"text\": \"第2天\", \"score\": 0, \"position\": [[457, 150], [496, 150], [496, 166], [457, 166]]}, {\"text\": \"第3天\", \"score\": 0, \"position\": [[550, 149], [593, 149], [593, 168], [550, 168]]}, {\"text\": \"第4天\", \"score\": 0, \"position\": [[644, 147], [691, 147], [691, 168], [644, 168]]}, {\"text\": \"第5天\", \"score\": 0, \"position\": [[740, 149], [785, 149], [785, 168], [740, 168]]}, {\"text\": \"周礼\", \"score\": 0, \"position\": [[175, 190], [241, 190], [241, 209], [175, 209]]}, {\"text\": \"到有礼\", \"score\": 0, \"position\": [[175, 260], [243, 260], [243, 280], [175, 280]]}, {\"text\": \"第6天\", \"score\": 0, \"position\": [[361, 272], [401, 272], [401, 290], [361, 290]]}, {\"text\": \"第7天\", \"score\": 0, \"position\": [[458, 273], [496, 273], [496, 290], [458, 290]]}, {\"text\": \"第8天\", \"score\": 0, \"position\": [[553, 273], [590, 273], [590, 289], [553, 289]]}, {\"text\": \"第9天\", \"score\": 0, \"position\": [[649, 273], [686, 273], [686, 289], [649, 289]]}, {\"text\": \"第10天\", \"score\": 0, \"position\": [[736, 270], [787, 270], [787, 290], [736, 290]]}, {\"text\": \"升级有礼\", \"score\": 0, \"position\": [[177, 331], [241, 331], [241, 351], [177, 351]]}, {\"text\": \"充值返还\", \"score\": 0, \"position\": [[179, 402], [243, 402], [243, 422], [179, 422]]}, {\"text\": \"第1\", \"score\": 0, \"position\": [[359, 396], [403, 396], [403, 412], [359, 412]]}, {\"text\": \"第12天\", \"score\": 0, \"position\": [[454, 393], [500, 393], [500, 413], [454, 413]]}, {\"text\": \"第13天\", \"score\": 0, \"position\": [[548, 393], [596, 393], [596, 413], [548, 413]]}, {\"text\": \"第14天\", \"score\": 0, \"position\": [[644, 395], [689, 395], [689, 410], [644, 410]]}, {\"text\": \"第15天\", \"score\": 0, \"position\": [[737, 393], [787, 393], [787, 413], [737, 413]]}, {\"text\": \"手机绑定\", \"score\": 0, \"position\": [[177, 473], [241, 473], [241, 492], [177, 492]]}, {\"text\": \"更多福利\", \"score\": 0, \"position\": [[144, 542], [241, 542], [241, 562], [144, 562]]}, {\"text\": \"到3天\", \"score\": 0, \"position\": [[298, 586], [356, 586], [356, 606], [298, 606]]}, {\"text\": \"签到8天\", \"score\": 0, \"position\": [[419, 586], [477, 586], [477, 606], [419, 606]]}, {\"text\": \"签到14天\", \"score\": 0, \"position\": [[535, 586], [601, 586], [601, 606], [535, 606]]}, {\"text\": \"到21天\", \"score\": 0, \"position\": [[656, 586], [721, 586], [721, 606], [656, 606]]}, {\"text\": \"签到28天\", \"score\": 0, \"position\": [[773, 588], [844, 584], [845, 604], [774, 607]]}]'}, {'id': 606, 'content': '[{\"text\": \"Setu Subtites\", \"score\": 0, \"position\": [[100, 96], [313, 100], [312, 135], [99, 131]]}, {\"text\": \"Subtite Mode\", \"score\": 0, \"position\": [[100, 176], [199, 176], [199, 198], [100, 198]]}, {\"text\": \"None\", \"score\": 0, \"position\": [[555, 184], [589, 184], [589, 206], [555, 206]]}, {\"text\": \"Subtitle Size\", \"score\": 0, \"position\": [[110, 263], [199, 263], [199, 284], [110, 284]]}, {\"text\": \"Smalt Defaut)\", \"score\": 0, \"position\": [[526, 267], [624, 267], [624, 288], [526, 288]]}, {\"text\": \"Subtite Languae\", \"score\": 0, \"position\": [[112, 343], [236, 343], [236, 365], [112, 365]]}, {\"text\": \"Francais\", \"score\": 0, \"position\": [[546, 345], [601, 345], [601, 366], [546, 366]]}, {\"text\": \"Subtite Contrast\", \"score\": 0, \"position\": [[112, 427], [230, 427], [230, 449], [112, 449]]}, {\"text\": \"Chiteis\", \"score\": 0, \"position\": [[95, 494], [404, 488], [404, 515], [96, 522]]}, {\"text\": \"Next ECHAP Back\", \"score\": 0, \"position\": [[101, 588], [294, 584], [295, 611], [102, 616]]}]'}, {'id': 767, 'content': '[{\"text\": \"Apple\", \"score\": 0, \"position\": [[826, 272], [958, 276], [957, 320], [825, 316]]}, {\"text\": \"Annihilator\", \"score\": 0, \"position\": [[772, 327], [1016, 330], [1015, 368], [772, 364]]}, {\"text\": \"Dees\", \"score\": 0, \"position\": [[752, 426], [864, 426], [864, 452], [752, 452]]}, {\"text\": \"58/100\", \"score\": 0, \"position\": [[939, 518], [1008, 518], [1008, 551], [939, 551]]}, {\"text\": \"Men\", \"score\": 0, \"position\": [[105, 595], [153, 595], [153, 619], [105, 619]]}]'}, {'id': 766, 'content': '[{\"text\": \"Bluebery Slime\", \"score\": 0, \"position\": [[511, 139], [706, 139], [706, 178], [511, 178]]}, {\"text\": \"Petiteandterifiedofbeingetalon\", \"score\": 0, \"position\": [[617, 205], [877, 205], [877, 226], [617, 226]]}, {\"text\": \"Bueberriesmoveinpacksand sticktotheir\", \"score\": 0, \"position\": [[616, 238], [917, 238], [917, 259], [616, 259]]}, {\"text\": \"peed\", \"score\": 0, \"position\": [[506, 279], [552, 279], [552, 303], [506, 303]]}, {\"text\": \"targets suroundin them and preventinthein\", \"score\": 0, \"position\": [[614, 271], [933, 271], [933, 292], [614, 292]]}]'}, {'id': 774, 'content': '[{\"text\": \"植物学家\", \"score\": 0, \"position\": [[1444, 451], [1538, 451], [1538, 480], [1444, 480]]}, {\"text\": \"阿尔法\", \"score\": 0, \"position\": [[1253, 494], [1532, 494], [1532, 578], [1253, 578]]}, {\"text\": \"可复活一次\", \"score\": 0, \"position\": [[1367, 706], [1487, 706], [1487, 739], [1367, 739]]}, {\"text\": \"技能:召唤豌豆射手\", \"score\": 0, \"position\": [[1280, 743], [1481, 743], [1481, 770], [1280, 770]]}, {\"text\": \"转到设置\", \"score\": 0, \"position\": [[1328, 790], [1381, 790], [1381, 804], [1328, 804]]}]'}]\n", - "\n", - "# 生成索引\n", - "for data in dataset:\n", - " content = json.loads(data[\"content\"])\n", - " texts = []\n", - " for item in content:\n", - " texts.append(item[\"text\"])\n", - " doc_id = f\"{data['id']}\"\n", - " es.index(index=\"my_index\", id=doc_id, body={\"content\": ' '.join(texts)})\n", - "\n", - "# 生成索引\n", - "#for data in dataset:\n", - "# for item in data[\"list\"]:\n", - "# doc_id = f\"{data['id']}_{item['text']}\"\n", - "# es.index(index=\"my_index\", id=doc_id, body=item)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'_shards': {'failed': 0, 'skipped': 0, 'successful': 1, 'total': 1},\n", - " 'hits': {'hits': [{'_id': '774',\n", - " '_index': 'my_index',\n", - " '_score': 3.2047122,\n", - " '_source': {'content': '植物学家 阿尔法 可复活一次 技能:召唤豌豆射手 转到设置'}},\n", - " {'_id': '587',\n", - " '_index': 'my_index',\n", - " '_score': 2.2945156,\n", - " '_source': {'content': '福利 33.3万 2875万 好看视频 '\n", - " '勇土领取了首次值第三天的奖励,得了经典坐 累计到 @搞事丸 最强 '\n", - " '第1天 第2天 第3天 第4天 第5天 周礼 到有礼 第6天 第7天 '\n", - " '第8天 第9天 第10天 升级有礼 充值返还 第1 第12天 '\n", - " '第13天 第14天 第15天 手机绑定 更多福利 到3天 签到8天 '\n", - " '签到14天 到21天 签到28天'}}],\n", - " 'max_score': 3.2047122,\n", - " 'total': {'relation': 'eq', 'value': 2}},\n", - " 'timed_out': False,\n", - " 'took': 0}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/satori/ocr/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/__init__.py:397: SecurityWarning: Connecting to 'https://47.102.112.57:9200' using TLS with verify_certs=False is insecure\n", - " _transport = transport_class(\n" - ] - } - ], - "source": [ - "import warnings\n", - "from pprint import pprint\n", - "from urllib3.exceptions import InsecureRequestWarning\n", - "warnings.simplefilter('ignore', InsecureRequestWarning)\n", - "\n", - "from elasticsearch import Elasticsearch\n", - "es = Elasticsearch(\"https://47.102.112.57:9200\", basic_auth=(\"elastic\", \"password\"), verify_certs=False)\n", - "\n", - "# 搜索\n", - "res = es.search(index=\"my_index\", body={\"query\": {\"match\": {\"content\": \"豌豆 福利\"}}})\n", - "pprint(res.body)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/demo.py b/demo.py deleted file mode 100644 index c462a78..0000000 --- a/demo.py +++ /dev/null @@ -1,21 +0,0 @@ -import pymysql -import pymysql.cursors -from dotenv import dotenv_values -from pprint import pprint - -config = dotenv_values(".env") -conn = pymysql.connect(host=config['MYSQL_HOST'], user=config['MYSQL_USER'], password=config['MYSQL_PASSWORD'], database=config['MYSQL_NAME'], cursorclass=pymysql.cursors.DictCursor) -cursor = conn.cursor() -cursor.execute("SELECT * FROM web_images WHERE id=1436682 LIMIT 5") - -# 获取查询结果 -rows = cursor.fetchall() -for row in rows: - # 格式化打印 - pprint(row) - - - -# 关闭游标和连接 -cursor.close() -conn.close() diff --git a/main.py b/main.py index 5826be1..d0a10b6 100755 --- a/main.py +++ b/main.py @@ -3,65 +3,17 @@ import io import requests import oss2 -import plyvel - -from PIL import Image, ImageFile -from pprint import pprint -from dotenv import dotenv_values - -ImageFile.LOAD_TRUNCATED_IMAGES = True - -config = dotenv_values(".env") -db = plyvel.DB('database', create_if_missing=True) - -''' -# 写入一个键值对 -db.put(b'key', b'value') -# 获取一个键的值 -value = db.get(b'key') -# 删除一个键值对 -db.delete(b'key') -# 批量写入 -with db.write_batch() as wb: - for i in range(10000): - wb.put(b'key' + str(i).encode(), b'value' + str(i).encode()) -# 迭代数据库中的所有键值对 -for key, value in db: - print(key, value) -# 关闭数据库 -db.close() -''' - -# 下载图片(使用OSS下载) -def download_image(url:str) -> Image.Image: - if url.startswith('http://image.gameuiux.cn/') or url.startswith('https://image.gameuiux.cn/'): - try: - url = url.replace('http://image.gameuiux.cn/', '').replace('https://image.gameuiux.cn/', '') - oss2.defaults.connection_pool_size = 100 - oss_auth = oss2.Auth(config['OSS_ACCESS_KEY_ID'], config['OSS_ACCESS_KEY_SECRET']) - return Image.open(io.BytesIO(oss2.Bucket(oss_auth, f'http://{config["OSS_HOST"]}', config['OSS_BUCKET_NAME']).get_object(url).read())) - except Exception: - print('图片从OSS下载失败:', url) - return None - else: - try: - response = requests.get(url) - return Image.open(io.BytesIO(response.content)) - except Exception: - print('图片从URL下载失败:', url) - return None - import pymysql -import pymysql.cursors import cnocr import json import numpy as np +from PIL import Image, ImageFile +from dotenv import dotenv_values +from elasticsearch import Elasticsearch -# 打开 mysql -ocr = cnocr.CnOcr(rec_model_name='ch_PP-OCRv3') -conn = pymysql.connect(host=config['MYSQL_HOST'], user=config['MYSQL_USER'], password=config['MYSQL_PASSWORD'], database=config['MYSQL_NAME'], cursorclass=pymysql.cursors.DictCursor) -cursor = conn.cursor() -cursor.execute("SELECT id, content FROM web_images LIMIT 5") +ImageFile.LOAD_TRUNCATED_IMAGES = True +config = dotenv_values(".env") +oss2.defaults.connection_pool_size = 100 class MyEncoder(json.JSONEncoder): def default(self, obj): @@ -71,35 +23,45 @@ class MyEncoder(json.JSONEncoder): return obj.astype(int).tolist() return super(MyEncoder, self).default(obj) -dataset = [] +def download_image(url:str) -> Image.Image: + try: + if url.startswith('http://image.gameuiux.cn/') or url.startswith('https://image.gameuiux.cn/'): + url = url.replace('http://image.gameuiux.cn/', '').replace('https://image.gameuiux.cn/', '') + oss_auth = oss2.Auth(config['OSS_ACCESS_KEY_ID'], config['OSS_ACCESS_KEY_SECRET']) + return Image.open(io.BytesIO(oss2.Bucket(oss_auth, f'http://{config["OSS_HOST"]}', config['OSS_BUCKET_NAME']).get_object(url).read())) + else: + response = requests.get(url) + return Image.open(io.BytesIO(response.content)) + except Exception: + print(f'图片从{url}下载失败') + return None -# 获取查询结果(跳过下载失败的) -for item in cursor.fetchall(): - image = download_image(item['content']) - if image is None: - continue - # 将只包含那些非空非纯数字且长度大于1的'text'值 - out = ocr.ocr(image) - out = [x for x in out if x['text'] and not x['text'].isdigit() and len(x['text']) > 1] - #print(item['id'], json.dumps(out, ensure_ascii=False, cls=MyEncoder)) - dataset.append({ - 'id': item['id'], - 'content': json.dumps(out, ensure_ascii=False, cls=MyEncoder) - }) - - #texts = [x['text'] for x in out if x['text'] and not x['text'].isdigit() and len(x['text']) > 1] - #print(item['id'], texts) +def connect_to_mysql(): + return pymysql.connect(host=config['MYSQL_HOST'], user=config['MYSQL_USER'], password=config['MYSQL_PASSWORD'], database=config['MYSQL_NAME'], cursorclass=pymysql.cursors.SSDictCursor) - # 将结果存入 leveldb - # db.put(str(row['id']).encode(), ','.join(texts).encode()) +def save_text(conn, id:int, text:str): + with conn.cursor() as cursor: + cursor.execute("UPDATE web_images SET text = %s WHERE id = %s", (text, id)) -print(dataset) +def process_images(conn, ocr, es): + with conn.cursor(pymysql.cursors.SSCursor) as cursor: + cursor.execute("SELECT id, content, text FROM web_images WHERE text!='' LIMIT 10") + for id, content, text in cursor.fetchall(): + image = download_image(content) + if image is None: + continue + item = [x for x in ocr.ocr(image) if x['text'] and not x['text'].isdigit() and len(x['text']) > 1] + save_text(conn, id, json.dumps(item, ensure_ascii=False, cls=MyEncoder)) + texts = ' '.join([x['text'] for x in item]) + es.index(index='web_images', id=id, body={'content': texts}) -# 关闭游标和连接 -cursor.close() -conn.close() +def main(): + es = Elasticsearch(config['ELASTICSEARCH_HOST'], basic_auth=(config['ELASTICSEARCH_USERNAME'], config['ELASTICSEARCH_PASSWORD']), verify_certs=False) + if not es.indices.exists(index='web_images'): + es.indices.create(index='web_images') + ocr = cnocr.CnOcr(rec_model_name='ch_PP-OCRv3') + conn = connect_to_mysql() + process_images(conn, ocr, es) -# 关闭数据库 -db.close() - -print('Done') +if __name__ == "__main__": + main() diff --git a/x.jpg b/x.jpg deleted file mode 100644 index 46f02ecdf7e1472ea3fc09594d607cf6b2f5a72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62018 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