| | |
| | | å¾åå½å
¥æ¨¡åéæ±åæææ¡£ |
| | | 1. 项ç®èæ¯ |
| | | å¨å½ä»æ°å忶代ï¼å¾åæ°æ®å¨ä¼å¤é¢åæ®æ¼çè³å
³éè¦çè§è²ãæ 论æ¯å®é²çæ§ãæºè½åå
¬è¿æ¯å»çå½±åçé¢åï¼é«æåç¡®å°å½å
¥å¾åæ°æ®å¹¶å¯¹å
¶è¿è¡åçç®¡çæ¯å®ç°æºè½ååºç¨çåºç¡ãæ¬é¡¹ç®æ¨å¨å¼åä¸ä¸ªéå¾åå½å
¥ä¸æ¬å°ç¼å管çåè½äºä¸ä½ç客æ·ç«¯æ¨¡åï¼ä½ä¸ºæ´ä¸ª AI 项ç®çéè¦ç»æé¨åï¼ä¸ºåç»çå¾åå¤çãåæä»¥åä¸å
¶ä»åè½æ¨¡åçåå工使ä¾åå®çæ°æ®æ¯æã |
| | | 2. 坿¥çèå´ |
| | | æ¬éæ±åæææ¡£ä¸»è¦é¢å项ç®å¼åå¢éæåï¼å
æ¬ä½ä¸éäºè½¯ä»¶å¼åå·¥ç¨å¸ãæµè¯å·¥ç¨å¸ã产åè´è´£äººä»¥åç¸å
³ææ¯ç®¡ç人åãææ¡£è¯¦ç»éè¿°äºå¾åå½å
¥æ¨¡åçåè½éæ±ã设计æè·¯ä»¥åç¸å
³ææ¯ç»èï¼æ¨å¨ä¸ºå¼åå¢éæä¾æ¸
æ°çå¼åæå¯¼ååè便®ï¼ç¡®ä¿å¢éæåè½å¤åç¡®ç解该模åçè®¾è®¡ç®æ åå®ç°è¦æ±ï¼é«æå°å¼å±å¼åå·¥ä½ã |
| | | 3. ä¸ä¸æ¯è¯ |
| | | ⢠å¾åå½å
¥ï¼æå°å¤é¨å¾åæ°æ®å¯¼å
¥å°ç³»ç»ä¸çè¿ç¨ï¼å¯éè¿å¤ç§æ¹å¼å®ç°ï¼å¦ä»æ¬å°æä»¶å¤¹éæ©å¾çãéè¿æå头宿¶ææçã |
| | | ⢠æ¬å°ç¼åï¼æå¨å®¢æ·ç«¯æ¬å°åå¨ä¸´æ¶æ°æ®çåºåï¼ç¨äºæé«æ°æ®è®¿é®é度åå¤çæçï¼åå°å¯¹æå¡å¨çé¢ç¹è¯·æ±ã |
| | | â¢ æ°æ®é¢å¤çï¼å¨å¾åæ°æ®æ£å¼åå¨æä¼ è¾ä¹åï¼å¯¹å
¶è¿è¡çä¸ç³»åå¤çæä½ï¼å¦æ ¼å¼è½¬æ¢ãå°ºå¯¸è°æ´ãå缩çï¼ä»¥æ»¡è¶³ç³»ç»å¯¹æ°æ®è´¨éåæ§è½çè¦æ±ã |
| | | â¢ æ°æ®ä¸è´æ§ï¼æå¨å¤ç¨æ·ãå¤è®¾å¤ç¯å¢ä¸ï¼ç¡®ä¿å¾åæ°æ®å¨ä¸ååå¨ä½ç½®åä¸åæ¶é´ç¹ä¸ä¿æä¸è´æ§çç¶æï¼é¿å
æ°æ®å²çªåé误ã |
| | | â¢ æ°æ®å®å
¨æ§ï¼æ¶åå¾åæ°æ®çå å¯åå¨ãè®¿é®æéæ§å¶ä»¥å鲿¢æ°æ®æ³é²çæªæ½ï¼ç¡®ä¿å¾åæ°æ®å¨å½å
¥åç¼å管çè¿ç¨ä¸ä¸è¢«éæ³è·åå篡æ¹ã |
| | | 4. åè½æè¿° |
| | | 4.1 æ»çåè½æè¿° |
| | | å¾åå½å
¥æ¨¡åæ¯å®¢æ·ç«¯çæ ¸å¿åè½æ¨¡åä¹ä¸ï¼ä¸»è¦è´è´£å®ç°å¾åæ°æ®ç髿å½å
¥åæ¬å°ç¼å管çã该模ååºå
·å¤ä»¥ä¸ä¸»è¦åè½ï¼ |
| | | â¢ æ¯æå¤ç§å¾åå½å
¥æ¹å¼ï¼å
æ¬ä»æ¬å°æä»¶å¤¹éæ©å¾çãéè¿æå头宿¶ææçï¼ä»¥æ»¡è¶³ä¸ååºæ¯ä¸çå¾åéééæ±ã |
| | | ⢠对å½å
¥çå¾åæ°æ®è¿è¡å¿
è¦çé¢å¤çæä½ï¼å¦æ ¼å¼è½¬æ¢ãå°ºå¯¸è°æ´ãå缩çï¼ç¡®ä¿å¾åæ°æ®ç¬¦åç³»ç»è¦æ±ï¼æé«æ°æ®å¤çæçã |
| | | ⢠å°é¢å¤çåçå¾åæ°æ®åå¨å°æ¬å°ç¼åä¸ï¼å®ç°å¿«é访é®å临æ¶åå¨ï¼åæ¶ä¿è¯æ°æ®çä¸è´æ§åå®å
¨æ§ã |
| | | ⢠æä¾å¯¹æ¬å°ç¼åæ°æ®ç管çåè½ï¼å
æ¬æ¥çç¼åå表ãå 餿å®ç¼åæ°æ®ãæ¸
çå
¨é¨ç¼åçæä½ï¼æ¹ä¾¿ç¨æ·å¯¹ç¼åæ°æ®è¿è¡ç»´æ¤å管çã |
| | | â¢ ä¸æå¡å¨ç«¯è¿è¡æ°æ®äº¤äºï¼å°æ¬å°ç¼åä¸çå¾åæ°æ®æç
§ä¸å®çè§ååçç¥ä¸ä¼ è³æå¡å¨ï¼åæ¶æ¥æ¶æå¡å¨è¿åçç¸å
³åé¦ä¿¡æ¯ï¼ç¡®ä¿æ°æ®ç宿´æ§åä¸è´æ§ã |
| | | 4.2 å
·ä½è´è´£æ¨¡åçæè¿° |
| | | å¾åå½å
¥åè½ |
| | | ç¨æ·å¯ä»¥éè¿ç颿ä½éæ©ä»æ¬å°æä»¶å¤¹å¯¼å
¥å¾çï¼ç³»ç»ä¼å¼¹åºæä»¶éæ©å¯¹è¯æ¡ï¼ç¨æ·å¨å
¶ä¸æµè§å¹¶éæ©æéçå¾çæä»¶ï¼ç¹å»âç¡®å®âæé®åï¼ç³»ç»å°å¾çæä»¶å è½½å°å
åä¸ï¼å¹¶å¨çé¢ä¸æ¾ç¤ºå¾ççé¢è§ä¿¡æ¯ï¼åæ¶æç¤ºç¨æ·å¾ç导å
¥æåã |
| | | ç¨æ·ä¹å¯ä»¥éæ©ä½¿ç¨æå头宿¶ææå¾çï¼ç¹å»âå¼å¯æå头âæé®åï¼ç³»ç»ä¼è°ç¨æå头设å¤ï¼å®æ¶æ¾ç¤ºæå头ææçç»é¢ï¼ç¨æ·å¯ä»¥éè¿ç¹å»âææâæé®æ¥è·åå½åç»é¢çå¾çï¼å¹¶å°å
¶ä¿åå°å
åä¸ï¼åæ ·å¨çé¢ä¸æ¾ç¤ºå¾çé¢è§ä¿¡æ¯ï¼å¹¶æç¤ºç¨æ·æææåã |
| | | 对äºå¯¼å
¥æææçå¾çï¼ç³»ç»ä¼èªå¨è¿è¡ä¸ç³»åé¢å¤çæä½ï¼å
æ¬æ£æ¥å¾çæ ¼å¼æ¯å¦ç¬¦åè¦æ±ï¼è¥ä¸ç¬¦ååèªå¨è½¬æ¢ä¸ºç³»ç»æ¯æçæ ¼å¼ï¼æ ¹æ®ç³»ç»è®¾å®çå°ºå¯¸è¦æ±å¯¹å¾çè¿è¡ç¼©æ¾è°æ´ï¼ç¡®ä¿å¾ç大å°éä¸ï¼ä¾¿äºåç»å¤çååå¨ï¼å¯¹å¾çè¿è¡å缩å¤çï¼ä»¥åå°å¾çæä»¶ç大å°ï¼æé«æ°æ®ä¼ è¾åå卿çã |
| | | æ¬å°ç¼å管çåè½ |
| | | ç³»ç»ä¼èªå¨å°é¢å¤çåçå¾çæ°æ®åå¨å°æ¬å°ç¼åç®å½ä¸ï¼æ¯ä¸ªç¼åæ°æ®é½æå¯ä¸çæ è¯ç¬¦ï¼ç¨äºåºåä¸åçå¾çã卿¬å°ç¼å管ççé¢ï¼ç¨æ·å¯ä»¥æ¥çå½åç¼åä¸çå¾çå表ï¼å
æ¬å¾ççåç§°ã大å°ã导å
¥æ¶é´çä¿¡æ¯ï¼ä»¥è¡¨æ ¼å½¢å¼å±ç¤ºï¼æ¹ä¾¿ç¨æ·å¿«éäºè§£ç¼åæ
åµã |
| | | ç¨æ·å¯ä»¥éè¿ç¹å»å¾çå表ä¸çæä¸è¡æ¥éä¸å¯¹åºçå¾çï¼ç¶åç¹å»âå é¤âæé®ï¼ç³»ç»ä¼å¼¹åºç¡®è®¤å é¤å¯¹è¯æ¡ï¼ç¨æ·ç¡®è®¤åï¼ç³»ç»å°ä»æ¬å°ç¼åä¸å é¤è¯¥å¾çï¼å¹¶æ´æ°ç¼åå表ï¼åæ¶æç¤ºç¨æ·å 餿åã |
| | | ç¨æ·è¿å¯ä»¥ç¹å»âæ¸
çå
¨é¨ç¼åâæé®ï¼ç³»ç»ä¼å次弹åºç¡®è®¤å¯¹è¯æ¡ï¼ç¨æ·ç¡®è®¤åï¼ç³»ç»å°æ¸
空æ¬å°ç¼åç®å½ä¸çææå¾çæ°æ®ï¼å¹¶æ´æ°ç¼ååè¡¨ï¼æç¤ºç¨æ·æ¸
ç宿ã |
| | | 卿¬å°ç¼å管çè¿ç¨ä¸ï¼ç³»ç»ä¼å®æ¶çæ§ç¼åç®å½ç大å°ï¼å½ç¼åæ°æ®å ç¨ç©ºé´è¶
è¿è®¾å®çé弿¶ï¼ç³»ç»ä¼èªå¨è§¦åæ¸
çæºå¶ï¼æç
§ä¸å®ççç¥ï¼å¦å 餿æ©å¯¼å
¥çå¾çï¼æ¸
çé¨åç¼åæ°æ®ï¼ä»¥ä¿è¯æ¬å°ç¼å空é´çåç使ç¨ï¼é¿å
å ç¼åæ°æ®è¿å¤å¯¼è´å®¢æ·ç«¯æ§è½ä¸éã |
| | | æ°æ®äº¤äºåè½ |
| | | ç³»ç»ä¼å®ææ£æ¥æ¬å°ç¼åä¸çå¾åæ°æ®ï¼æ ¹æ®é¢å
设å®çä¸ä¼ çç¥ï¼å¦å®æ¶ä¸ä¼ ãè¾¾å°ä¸å®æ°éä¸ä¼ çï¼ï¼å°ç¬¦åæ¡ä»¶çå¾åæ°æ®æå
ä¸ä¼ è³æå¡å¨ãå¨ä¸ä¼ è¿ç¨ä¸ï¼ç³»ç»ä¼å°å¾åæ°æ®å°è£
æç¹å®ç请æ±ç»æä½ï¼éè¿ç½ç»é信模ååéç»æå¡å¨ï¼å¹¶çå¾
æå¡å¨çååºã |
| | | 彿å¡å¨æåæ¥æ¶å¹¶å¤çå¾åæ°æ®åï¼ä¼è¿åç¸åºçååºç»æä½ï¼ç³»ç»æ¥æ¶å°ååºåï¼ä¼æ ¹æ®ååºå
å®¹æ´æ°æ¬å°ç¼åç¶æï¼å¦æ è®°å·²ä¸ä¼ çå¾åæ°æ®ãè®°å½ä¸ä¼ æ¶é´çä¿¡æ¯ãè¥å¨ä¸ä¼ è¿ç¨ä¸åºç°ç½ç»å¼å¸¸æå
¶ä»é误ï¼ç³»ç»ä¼èªå¨è®°å½é误信æ¯ï¼å¹¶å¨ä¸æ¬¡ä¸ä¼ æ¶éæ°å°è¯ä¸ä¼ 失败çå¾åæ°æ®ï¼ç¡®ä¿æ°æ®ç宿´æ§åä¸è´æ§ã |
| | | 5. å¾çå½å
¥æ¨¡åæµç¨å¾ |
| | | |
| | | 6. è´è´£æ¨¡åç¨å°çæ°æ®åºè¡¨ |
| | | æ¬å°ç¼å表 |
| | | åæ®µå æ°æ®ç±»å çº¦æ æè¿° |
| | | cache_id INT 主é®ï¼èªå¢ ç¼åæ°æ®çå¯ä¸æ è¯ç¬¦ |
| | | image_name VARCHAR(255) NOT NULL å¾åæä»¶çåç§° |
| | | image_path VARCHAR(255) NOT NULL å¾åæä»¶å¨æ¬å°ç¼åä¸çåå¨è·¯å¾ |
| | | image_size INT NOT NULL å¾åæä»¶ç大å°ï¼åä½ä¸ºåè |
| | | import_time DATETIME NOT NULL å¾åæ°æ®å¯¼å
¥çæ¶é´ |
| | | upload_status TINYINT é»è®¤å¼ä¸º0 å¾åæ°æ®çä¸ä¼ ç¶æï¼0表示æªä¸ä¼ ï¼1表示已ä¸ä¼ |
| | | upload_time DATETIME å¯ä¸ºç©º å¾åæ°æ®ä¸ä¼ è³æå¡å¨çæ¶é´ |
| | | |
| | | |
| | | å¾åé¢å¤çè®°å½è¡¨ |
| | | åæ®µå æ°æ®ç±»å çº¦æ æè¿° |
| | | record_id INT 主é®ï¼èªå¢ é¢å¤çè®°å½çå¯ä¸æ è¯ç¬¦ |
| | | cache_id INT å¤é®ï¼å
³èæ¬å°ç¼å表 对åºçç¼åæ°æ®æ è¯ç¬¦ |
| | | original_format VARCHAR(50) NOT NULL åå§å¾åæä»¶çæ ¼å¼ |
| | | converted_format VARCHAR(50) NOT NULL 转æ¢åçå¾åæä»¶æ ¼å¼ |
| | | original_size INT NOT NULL åå§å¾åæä»¶ç大å°ï¼åä½ä¸ºåè |
| | | processed_size INT NOT NULL é¢å¤çåå¾åæä»¶ç大å°ï¼åä½ä¸ºåè |
| | | process_time DATETIME NOT NULL é¢å¤çæä½çæ¶é´ |
| | | 7. UMLç±»å¾ |
| | | ç±»åï¼ImageLoader |
| | | â¢ å±æ§ï¼ |
| | | o supportedFormatsï¼List<String>ï¼æ¯æçå¾åæ ¼å¼åè¡¨ï¼ |
| | | o maxImageSizeï¼intï¼å
许导å
¥çæå¤§å¾åå°ºå¯¸ï¼ |
| | | â¢ æ¹æ³ï¼ |
| | | o loadFromLocal(filePathï¼String)ï¼Imageï¼ä»æ¬å°æä»¶è·¯å¾å è½½å¾åï¼ |
| | | o captureFromCamera()ï¼Imageï¼éè¿æå头宿¶ææå¾åï¼ |
| | | ç±»åï¼ImagePreprocessor |
| | | â¢ å±æ§ï¼ |
| | | o targetFormatï¼Stringï¼ç®æ å¾åæ ¼å¼ï¼ |
| | | o targetSizeï¼Dimensionï¼ç®æ å¾åå°ºå¯¸ï¼ |
| | | o compressionRatioï¼floatï¼å¾åå缩æ¯ä¾ï¼ |
| | | â¢ æ¹æ³ï¼ |
| | | o preprocess(imageï¼Image)ï¼Imageï¼å¯¹å¾åè¿è¡é¢å¤çï¼ |
| | | ç±»åï¼CacheManager |
| | | â¢ å±æ§ï¼ |
| | | o cacheDirï¼Stringï¼æ¬å°ç¼åç®å½è·¯å¾ï¼ |
| | | o maxCacheSizeï¼longï¼æ¬å°ç¼åæå¤§å ç¨ç©ºé´ï¼ |
| | | â¢ æ¹æ³ï¼ |
| | | o saveToCache(imageï¼Image)ï¼voidï¼å°å¾åä¿åå°æ¬å°ç¼åï¼ |
| | | o listCache()ï¼List<CacheItem>ï¼è·åæ¬å°ç¼åä¸çå¾ååè¡¨ï¼ |
| | | o deleteCache(cacheIdï¼int)ï¼voidï¼å 餿å®ç¼åæ°æ®ï¼ |
| | | o clearCache()ï¼voidï¼æ¸
空å
¨é¨æ¬å°ç¼åï¼ |
| | | ç±»åï¼DataUploader |
| | | â¢ å±æ§ï¼ |
| | | o serverUrlï¼Stringï¼æå¡å¨ä¸ä¼ å°åï¼ |
| | | o uploadIntervalï¼intï¼ä¸ä¼ é´éæ¶é´ï¼åä½ä¸ºç§ï¼ |
| | | o maxUploadAttemptsï¼intï¼æå¤§éè¯æ¬¡æ°ï¼ |
| | | â¢ æ¹æ³ï¼ |
| | | o uploadCacheData()ï¼voidï¼å°æ¬å°ç¼åä¸çå¾åæ°æ®ä¸ä¼ è³æå¡å¨ï¼ |
| | | o handleUploadResponse(responseï¼ImageUploadResponse)ï¼voidï¼å¤çæå¡å¨è¿åçååºï¼ |
| | | o retryUpload(cacheIdï¼int)ï¼voidï¼éæ°å°è¯ä¸ä¼ 失败çå¾åæ°æ®ï¼ |
| | | ç±»ä¹é´çå
³ç³» |
| | | ⢠ImageLoaderï¼ |
| | | o è´è´£ä»æ¬å°æä»¶ææå头å è½½å¾åæ°æ®ã |
| | | o å°å è½½çå¾åæ°æ®ä¼ éç»ImagePreprocessorè¿è¡é¢å¤çã |
| | | ⢠ImagePreprocessorï¼ |
| | | o æ¥æ¶ImageLoaderä¼ éçå¾åæ°æ®ã |
| | | o 对å¾åè¿è¡æ ¼å¼è½¬æ¢ãå°ºå¯¸è°æ´åå缩çé¢å¤çæä½ã |
| | | o å°é¢å¤çåçå¾åæ°æ®ä¼ éç»CacheManagerè¿è¡æ¬å°ç¼åã |
| | | ⢠CacheManagerï¼ |
| | | o æ¥æ¶ImagePreprocessorä¼ éçé¢å¤çåçå¾åæ°æ®ã |
| | | o å°å¾åæ°æ®åå¨å°æ¬å°ç¼åç®å½ä¸ã |
| | | o æä¾ç¼å管çåè½ï¼å¦æ¥çç¼åå表ãå 餿å®ç¼åæ°æ®ãæ¸
çå
¨é¨ç¼åçã |
| | | o å°ç¼åæ°æ®çç¸å
³ä¿¡æ¯ï¼å¦ç¼åIDãå¾ååç§°ãè·¯å¾çï¼ä¼ éç»DataUploaderè¿è¡ä¸ä¼ ã |
| | | ⢠DataUploaderï¼ |
| | | o æ¥æ¶CacheManagerä¼ éçç¼åæ°æ®ä¿¡æ¯ã |
| | | o æ ¹æ®ä¸ä¼ çç¥ï¼å¦å®æ¶ä¸ä¼ ãè¾¾å°ä¸å®æ°éä¸ä¼ çï¼å°ç¼åæ°æ®ä¸ä¼ è³æå¡å¨ã |
| | | o å¤çæå¡å¨è¿åçååºï¼æ´æ°æ¬å°ç¼åç¶æã |
| | | o å¨ä¸ä¼ 失败æ¶ï¼è®°å½é误信æ¯å¹¶éæ°å°è¯ä¸ä¼ ã |
| | | 8.ç½ç»éä¿¡ç¨å°çç»æä½ |
| | | 1.请æ±ç»æä½: |
| | | typedef struct ImageUploadRequest { |
| | | int request_id; // 请æ±å¯ä¸æ è¯ç¬¦ |
| | | char client_version[32]; // 客æ·ç«¯çæ¬ä¿¡æ¯ |
| | | int image_count; // å¾
ä¸ä¼ å¾åæ°é |
| | | ImageInfo image_infos[10]; // å¾åä¿¡æ¯æ°ç»ï¼æå¤§æ¯æ10å¼ å¾åï¼ |
| | | } ImageUploadRequest; |
| | | |
| | | typedef struct ImageInfo { |
| | | int cache_id; // å¾åç¼åID |
| | | char image_name[256]; // å¾åæä»¶å |
| | | int image_size; // å¾åæä»¶å¤§å°ï¼åèï¼ |
| | | char image_format[16]; // å¾åæ ¼å¼ï¼å¦jpgãpngçï¼ |
| | | } ImageInfo; |
| | | 2.ååºç»æä½ï¼ |
| | | typedef struct ImageUploadResponse { |
| | | int request_id; // 请æ±å¯ä¸æ è¯ç¬¦ |
| | | int status_code; // ååºç¶æç |
| | | char message[256]; // ååºæ¶æ¯ |
| | | ImageData image_data[10]; // å¾åæ°æ®æ°ç»ï¼æå¤§æ¯æ10å¼ å¾åï¼ |
| | | } ImageUploadResponse; |
| | | |
| | | typedef struct ImageData { |
| | | int cache_id; // å¾åç¼åID |
| | | char image_data[1024 * 1024]; // å¾åæ°æ®ï¼æå¤§æ¯æ1MBå¾åæ°æ®ï¼ |
| | | int data_size; // å¾åæ°æ®å¤§å°ï¼åèï¼ |
| | | } ImageData; |
| | | 3.é
å¥ç»æä½ï¼ |
| | | typedef struct ImageData { |
| | | int cache_id; // å¾åç¼åID |
| | | char image_data[1024 * 1024]; // å¾åæ°æ®ï¼æå¤§æ¯æ1MBå¾åæ°æ®ï¼ |
| | | int data_size; // å¾åæ°æ®å¤§å°ï¼åèï¼ |
| | | } ImageData; |
| | | |
| | | |
| | | |