
Rajinder Singh
Deep Learning Researcher
प्रकाशित Sep 17, 2026
अद्यतन Sep 17, 2026 · मिनट पढ़ने का समय

ImageToTextTask अनुरोध के लिए इस बफर को बेस64 में संकोड़ित करें।createTask से solution.text वापस करता है; इस उदाहरण में पॉलिंग नहीं किया गया है।एक छवि कैप्चा एम्बेडिंग की शुरुआत एक ऐसी अंतर है जो पूरे विवरण के लिए प्रभावित करता है: इनपुट एक छवि फ़ाइल है, और उपयोगी आउटपुट टेक्स्ट है। जब एक नोड.जेएस परीक्षण रनर को विकृत अक्षरों वाले फॉर्म के साथ सामना करना पड़ता है, तो उसे उस विशिष्ट प्रयास के लिए अक्षरों की आवश्यकता होती है। एक टोकन-ओरिएंटेड reCAPTCHA उदाहरण एक अलग कार्य को संबोधित करता है।
इस गाइड में दस्तावेज़ी CapSolver छवि स्वीकृति अनुरोध और छवि के रूप में एक छोटा नोड.जेएस एडैप्टर का उपयोग किया गया है ताकि एक फ़ाइल कैसे अनुरोध बॉडी बन जाती है और उत्तर कहाँ दिखाई देता है। उदाहरण में एक स्वामित्व वाले परीक्षण फॉर्म की अपेक्षा की जाती है जिसकी छवि आप स्थानीय रूप से सहेज सकते हैं। ब्राउज़र नेविगेशन और एप्लिकेशन-विशिष्ट फॉर्म सबमिशन आपके परीक्षण रनर के हिस्से के रूप में रहता है।
एक छवि कैप्चा सॉल्वर उपलब्ध छवि में पहचाने गए अक्षर वापस करता है। CAPTCHA शब्दकोश प्रविष्टि व्यापक संदर्भ प्रदान करती है; इस कार्यान्वयन के संबंध में एक टेक्स्ट छवि के बजाय एक अंतःक्रिया वाले विजेट का ध्यान रखा जाता है।
आधिकारिक ImageToTextTask दस्तावेज़ीकरण एक टास्क की परिभाषा करता है जिसमें एक प्रकार, body में बेस64 छवि और एक पहचान मॉड्यूल होता है। एक सफल तैयार उत्तर solution.text पर पहचाने गए टेक्स्ट को उजागर करता है। इस प्रवाह के लिए, प्रारंभिक createTask उत्तर में परिणाम होता है।
उदाहरण को एक फॉर्म से जोड़ते समय इन मानों को अलग-अलग रखें:
| मान | उद्देश्य | गंतव्य |
|---|---|---|
| छवि बाइट्स | पहचान के लिए चुनौती | स्थानीय फ़ाइल, फिर बेस64 टास्क बॉडी |
| पहचाने गए टेक्स्ट | प्रस्तावित उत्तर | स्वामित्व वाले फॉर्म के कैप्चा उत्तर क्षेत्र |
| एप्लिकेशन परिणाम | उत्प्रेरण सफलता | उत्तर प्रस्तुति के बाद आपका दावा |
एक पहचान परिणाम एक मध्यवर्ती परिणाम है। अभी भी एक उत्तर को अस्वीकृत किया जा सकता है यदि चुनौती बदल गई हो, सत्र समाप्त हो गया हो या उत्तर दूसरी छवि के लिए हो।
एक नोड.जेएस संस्करण का उपयोग करें जिसमें एम्बेडेड fetch और AbortSignal.timeout हो; एडैप्टर को नोड.जेएस 24.16.0 पर परीक्षण किया गया है। कोई एनएमपी निर्भरता आवश्यक नहीं है। नीचे दिए गए दो जावास्क्रिप्ट फ़ाइलों को एक निर्देशिका में सहेजें और उनके पास एक असंवेदनशील परीक्षण छवि रखें।
उदाहरण ./captcha.png पढ़ता है। यह एक स्थानीय पथ है, एक छवि URL या एक संकोड़ा डेटा नहीं है। एपीआई कॉल के बाद फ़ाइल की जांच करें: एक PNG एक्सटेंशन के साथ सेवित HTML एरर पेज अभी भी एक HTML पृष्ठ है। सेवा द्वारा समर्थित एक वैध छवि का उपयोग करें।
अपने CapSolver खाते से एक समाधान एपीआई कुंजी प्राप्त करें और इसे प्रक्रिया में CAPSOLVER_API_KEY के रूप में अपने वातावरण या सीक्रेट मैनेजर में प्रस्तुत करें। इस प्रकार के अंतर्निहित जानकारी को ब्राउज़र जावास्क्रिप्ट और स्रोत नियंत्रण से बाहर रखें। एक प्रशासकीय प्रकाशन या एमसीपी प्रमाण पत्र एक समाधान एपीआई कुंजी के बजाय एक प्रतिस्थापन नहीं है।
छवि से जुड़े फॉर्म सत्र को बरकरार रखें। जब फॉर्म एक नई चुनौती उत्पन्न करता है, तो एक नई छवि सहेजें। एक ही नाम के फ़ाइल को अन्य अनुरोध द्वारा पुराने फॉर्म के साथ ओवरराइट करने से गलत प्रयास के लिए एक वैध पहचान उत्तर प्राप्त हो सकता है। समानांतर प्रयासों के लिए अलग-अलग फ़ाइलें बनाएं या उनके बाइट्स को अलग-अलग रखें।
छवि को बाइनरी डेटा के रूप में पढ़ें, फिर परिणामस्वरूप बफर को संकोड़ित करें। नोड के फ़ाइल सिस्टम दस्तावेज़ीकरण में readFile का वर्णन किया गया है, और इसके बफर दस्तावेज़ीकरण में बेस64 संकोड़न की परिभाषा है।
नीचे दिए गए मुख्य अभिव्यक्ति image.toString('base64') है। पहले फ़ाइल को यूटीएफ-8 के रूप में पढ़ें: छवि बाइट्स एक टेक्स्ट दस्तावेज़ नहीं हैं। फिर फ़ाइल के नाम को task.body के रूप में भी भेजें। दूरस्थ सेवा को संकोड़ित सामग्री की आवश्यकता है, न कि आपके कंप्यूटर पर एक पथ।
बेस64 के बिना कच्चा डेटा भेजें, data:image/png;base64, प्रीफिक्स के बिना। एक डेटा URL ब्राउज़र में उपयोगी भूमिका निभाता है लेकिन अंतर्निहित टास्क बॉडी से अलग होता है। बफर से संकोड़न उत्पन्न करना असंबंधित प्रीफिक्स या लाइन ब्रेक की अपेक्षा बचाता है।
इस उदाहरण में खाली फ़ाइल को अस्वीकृत कर दिया जाता है। यह छवि फॉर्मेट, आकार या दृश्य गुणवत्ता की जांच नहीं करता है। यदि आपकी एप्लिकेशन अनुमति देती है तो इस फ़ंक्शन से पहले उनकी जांच करें। सफल पठन केवल बाइट्स उपलब्ध होने की बात स्थापित करता है।
recognize-image.mjs के रूप में इस एडैप्टर को सहेजें। एंडपॉइंट और टास्क क्षेत्र आधिकारिक दस्तावेज़ीकरण के अनुसार हैं। फ़ाइल लोडिंग, टाइमआउट और उत्तर जांच इस उदाहरण के लिए अतिरिक्त हैं। एडैप्टर के साथ मॉक उत्तरों के साथ चलाया गया था; वास्तविक सेवा के खिलाफ इसका उपयोग करने के लिए आपके समाधान कुंजी की आवश्यकता होती है और यह एक जीवंत वैधता चरण रहता है।
import { readFile } from 'node:fs/promises';
// अनुरोध क्षेत्र आधिकारिक ImageToTextTask दस्तावेज़ के अनुसार होते हैं।
export async function recognizeImage(path, apiKey, request = fetch) {
if (!apiKey) throw new Error('सबसे पहले CAPSOLVER_API_KEY सेट करें।');
const image = await readFile(path);
if (!image.length) throw new Error('छवि फ़ाइल खाली है।');
const response = await request('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal: AbortSignal.timeout(60000),
body: JSON.stringify({
clientKey: apiKey,
task: {
type: 'ImageToTextTask',
module: 'common',
body: image.toString('base64')
}
})
});
if (!response.ok) throw new Error('HTTP स्थिति ' + response.status);
const result = await response.json();
if (result.errorId !== 0) {
throw new Error(result.errorCode || 'छवि पहचान विफल रही।');
}
if (result.status !== 'ready' ||
typeof result.solution?.text !== 'string' ||
!result.solution.text.length) {
throw new Error('एपीआई ने पहचाने गए टेक्स्ट वापस नहीं किया।');
}
return result.solution.text;
}
फ़ंक्शन एक पथ और एपीआई कुंजी स्वीकार करता है और पहचाने गए टेक्स्ट वापस करता है। इसका तीसरा आर्गुमेंट एक परीक्षण द्वारा fetch को बदल सकता है; सामान्य कॉलर इसे छोड़ देते हैं। 60-सेकंड का टाइमआउट स्थानीय सेटिंग है, न कि एक प्रस्तावित पहचान समय या सेवा सीमा।
अनुरोध के चरणों के बाद उत्तर जांच करें। असफल HTTP स्थिति पारस्परिक रूप से पारस्परिक रूप से विफल रहती है। अमान्य JSON पारस्परिक रूप से एक पारस्परिक त्रुटि उत्पन्न करता है। प्रदाता त्रुटि errorId के माध्यम से संभाली जाती है। एक सफल दिखता हुआ एंवेलप में अभी भी एक तैयार परिणाम होना चाहिए जिसमें गैर-खाली टेक्स्ट हो, जो एक गायब उत्तर के रूप में एक खाली फॉर्म मान के रूप में चुप्पी से नहीं होता है।
कोई स्वचालित दोहराव अनुरोध नहीं है। परिवहन विफलता के बाद, क्लाइंट को यह ज्ञात नहीं हो सकता कि क्या सेवा मूल टास्क को प्राप्त कर चुकी है। अगर आप इस अनिश्चितता के साथ काम करते हैं तो इसे दोहराने के तरीके का निर्णय लें।
CapSolver बोनस कोड का उपयोग करें
अपने ऑटोमेशन बजट को तुरंत बढ़ाएं!
CapSolver खाता में जमा करते समय बोनस कोड CAP26 का उपयोग करें ताकि प्रत्येक भुगतान पर 5% बोनस मिले — कोई सीमा नहीं।
अपने CapSolver डैशबोर्ड में अभी इसे दर्ज करें
run.mjs के रूप में नीचे दिए गए एंट्री बिंदु को सहेजें। इसके जीवंत अनुरोध में आपके स्वयं के समाधान कुंजी की आवश्यकता होती है; स्थानीय एडैप्टर परीक्षण जीवंत समाधान के समाप्त नहीं होते हैं:
import { recognizeImage } from './recognize-image.mjs';
try {
const path = process.argv[2];
if (!path) throw new Error('उपयोग: node run.mjs ./captcha.png');
const text = await recognizeImage(path, process.env.CAPSOLVER_API_KEY);
console.log(text); // इस टर्मिनल उदाहरण में केवल असंवेदनशील स्वामित्व वाले परीक्षण छवि का उपयोग करें।
} catch (error) {
console.error(error.message);
process.exitCode = 1;
}
अपने वातावरण में समाधान कुंजी उपलब्ध होने पर, नीचे दिए गए आदेश का उपयोग करें। इस गाइड के लिए जीवंत आह्वान किया गया नहीं है:
node run.mjs ./captcha.png
एक सफल आह्वान वापस किए गए टेक्स्ट को प्रिंट करता है। उत्तर आपकी छवि पर निर्भर करता है; जीवंत कॉल के लिए कोई निश्चित अपेक्षित मान नहीं है। इस टर्मिनल उदाहरण में एक असंवेदनशील स्वामित्व फिक्सचर का उपयोग करें और साझा एप्लिकेशन लॉग में चुनौती उत्तर के प्रिंट करने से बचें।
एक परीक्षण रनर में, recognizeImage को कॉल करें और उसके लौटे मान को उसी छवि से संबंधित उत्तर क्षेत्र में भेजें। सिलेक्टर और सबमिशन विधि आपके एप्लिकेशन के हिस्से के रूप में रहता है, इसलिए इनका आविष्कार यहां नहीं किया जाता है। उत्तर प्रस्तुति के बाद वास्तविक फॉर्म परिणाम की पुष्टि करें, जैसे कि अपेक्षित परीक्षण रिकॉर्ड स्वीकृत हो गया है।
अगर फॉर्म विशिष्ट नियम नहीं देता है तो पहचाने गए स्ट्रिंग को बरकरार रखें। प्रत्येक उत्तर को बड़े अक्षर में बदलना या अंतराल हटाना इसके अर्थ को बदल सकता है। एक ज्ञात अक्षर सेट अपेक्षित परिणाम की पहचान में मदद कर सकता है, लेकिन अनिश्चित अक्षरों को चुप्पी से बदलना नहीं होना चाहिए।
सेवा द्वारा वर्णित छवि कार्य के अनुसार मॉड्यूल चुनें। इस अनुरोध में स्पष्ट रूप से common का उपयोग किया गया है। एक विशिष्ट मोड का चयन करने से पहले ImageToTextTask दस्तावेज़ीकरण में मॉड्यूल विवरण देखें।
एक मॉड्यूल असंबंधित इनपुट की मरम्मत नहीं कर सकता है। पूरे फॉर्म की स्क्रीनशॉट, एक पुरानी चुनौती, या असंबंधित टेक्स्ट वाली छवि के लिए कोई भी सेटिंग उपयुक्त उत्तर उत्पन्न नहीं कर सकता है। सबसे पहले यह सुनिश्चित करें कि उपलब्ध बाइट्स इच्छित चुनौती और सक्रिय प्रयास के साथ मेल खाते हैं।
अगर आपकी एप्लिकेशन कई छवि शैलियां उत्पन्न करती हैं, तो प्रत्येक शैली के लिए प्रतिनिधि स्वामित्व नमूने का उपयोग करें। अपने फिक्सचर से अपेक्षित उत्तर को पहचाने गए उत्तर से अलग रखें। इससे एक संश्लेषित कोडिंग जांच के रूप में पहचान सटीकता के सबूत के बिना असंगति को पुनर्उत्पन्न करना संभव होता है।
उदाहरण के लिए, एक फिक्सचर का दावा कर सकता है कि निर्दिष्ट फ़ाइल बाइट्स बेस64 संकोड़न और डिकोडिंग के साथ बरकरार रहते हैं। एक अलग पहचान जांच आपके उत्तर के साथ फिक्सचर के ज्ञात अक्षरों की तुलना करती है। एक तीसरा परीक्षण उस उत्तर को फॉर्म के माध्यम से प्रस्तुत करता है। इन परीक्षणों में अलग-अलग प्रश्न होते हैं और अलग-अलग परिणाम रिपोर्ट करते हैं।
पहले पहचान गुणवत्ता की विफलता की जांच करें। एक पढ़े जा सकने वाला पथ, खाली फ़ाइल, या कमी की वजह से अनुरोध सफल रहा है। अनुरोध मॉड्यूल बदलने से इन विफलताओं को हल नहीं किया जा सकता है।
दूरस्थ विफलताओं के लिए, एक नियंत्रित निदान रिकॉर्ड में प्रदाता त्रुटि कोड को बरकरार रखें और आधिकारिक एपीआई त्रुटि संदर्भ की संदर्भ लें। अपने अनुरोध के शरीर को डंप न करें, जिसमें दोनों प्रमाण पत्र और छवि होते हैं। असफल चरण और त्रुटि पहचानकर्ता के बजाय रिकॉर्ड करें।
| लक्षण | पहली जांच |
|---|---|
| फ़ाइल पढ़ी नहीं जा सकती | कार्यशाला निर्देशिका, पथ, अधिकार |
| छवि कार्य अस्वीकृत | कार्य प्रकार, कच्चा बेस64, समर्थित छवि इनपुट |
| कोई पहचाने गए टेक्स्ट नहीं | त्रुटि क्षेत्र और उत्तर संरचना |
| टेक्स्ट फॉर्म द्वारा अस्वीकृत | समान छवि और सत्र, अपरिवर्तित उत्तर |
| अनुरोध समाप्त हो जाता है | क्या मूल परिणाम अनिश्चित है? |
नोड के ग्लोबल एपीआई दस्तावेज़ीकरण में यहां उपयोग किए गए अनुरोध और अबॉर्ट प्राथमिकताओं को कवर किया गया है। स्थानीय अवधि समाप्त होना दूरस्थ प्रक्रिया के रद्द होने को स्थापित नहीं करता है।
एक समस्या रिपोर्ट करते समय, बताएं कि कौन सा चरण विफल रहा। "फ़ाइल पठन विफल रहा" और "सेवा द्वारा टेक्स्ट वापस कर दिया गया जिसे फॉर्म अस्वीकृत कर दिया" के लिए अलग-अलग साक्ष्य की आवश्यकता होती है। अपनी रिपोर्ट में प्रमाण पत्र और छवि सामग्री को साझा करें या एक नियंत्रित समर्थन प्रक्रिया के लिए आवश्यकता होने पर ही शामिल करें।
एडैप्टर के साथ सात स्थानीय परीक्षण मामलों के साथ चलाया गया, जिनमें अनुरोध निर्माण और बेस64 संरक्षण, कमी की कुंजी, खाली इनपुट, HTTP विफलताएं, प्रदाता त्रुटियां, अभाव परिणाम और गलत रूप से बने या असफल उत्तर शामिल हैं। कुछ मामलों में संबंधित दावे एक साथ जुड़े हुए हैं। परीक्षणों ने fetch को बदल दिया, इसलिए वे भुगतान की सेवा के साथ संपर्क नहीं करते थे।
छवि फिक्सचर ने संकोड़न की जांच की, और उत्तर एक आपूर्ति टेस्ट मान था। इन जांचों ने स्थानीय जावास्क्रिप्ट व्यवहार की स्थापना की। वे पहचान सटीकता या वास्तविक फॉर्म द्वारा स्वीकृति की माप नहीं करते हैं। अपने समाधान कुंजी और एक वर्तमान स्वामित्व चुनौती के साथ इन जांचों को पूरा करें जब तक कि एकीकरण पर भरोसा न करें।
एक ही एप्लिकेशन में टोकन कार्य के लिए, जावास्क्रिप्ट कैप्चा एपीआई गाइड का उपयोग करें। छवि पहचान को अपनी शाखा में रखें क्योंकि परिणाम प्रकार और दस्तावेज़ीकृत पुनर्प्राप्ति प्रवाह अलग होते हैं। CapSolver का परीक्षण करें अपने प्रतिनिधि स्वामित्व छवि के साथ अंतिम कनेक्शन की जांच करने के लिए।
प्रश्न: क्या मुझे एक एनएमपी पैकेज की आवश्यकता है?
एडैप्टर में निर्मित नोड.जेएस एपीआई का उपयोग किया गया है और कोई एनएमपी पैकेज आवश्यक नहीं है। आपके पास अनुकूल रनटाइम, एक वैध छवि और एक समाधान कुंजी की आवश्यकता है। लोकल परीक्षण के लिए नोड.जेएस 24.16.0 का उपयोग किया गया है।
प्रश्न: क्या ImageToTextTask के लिए getTaskResult का उपयोग करना चाहिए?
दस्तावेज़ी पहचान प्रवाह createTask से solution.text के साथ एक तैयार परिणाम वापस करता है। इस एडैप्टर में पॉलिंग नहीं किया गया है। अन्य कैप्चा कार्य से एक पॉलिंग लूप की अपेक्षा अनुकूलित नहीं किया जाना चाहिए।
प्रश्न: क्या मैं बेस64 के बजाय छवि URL भेज सकता हूं?
इस दस्तावेज़ीकृत अनुरोध में body क्षेत्र में संकोड़ित छवि सामग्री का उपयोग किया गया है। अपने एप्लिकेशन के माध्यम से स्वामित्व छवि प्राप्त करें और इसके बाइट्स को संकोड़ित करें। एक फ़ाइल का नाम या URL इस मान के बराबर नहीं है।
प्रश्न: क्यों फॉर्म द्वारा पहचाने गए टेक्स्ट को अस्वीकृत कर सकता है?
छवि और सत्र के समान प्रयास के साथ होने की जांच करें और उत्तर के बिना बदलाव की जांच करें। एक वापसी स्ट्रिंग न तो पहचान सटीकता और न ही एप्लिकेशन स्वीकृति की गारंटी देता है।
प्रश्न: क्या स्थानीय परीक्षण पहचान सटीकता की साबित करते हैं?
नहीं। वे एडैप्टर के व्यवहार की जांच करने के लिए आपूर्ति उत्तर का उपयोग करते हैं। पहचान और अंत-से-अंत स्वीकृति के लिए जीवंत सेवा और अपने स्वामित्व फॉर्म के साथ अलग-अलग परीक्षण करें।

Rajinder Singh
Deep Learning Researcher
Making CAPTCHA solving more reliable in automated workflows.
लेखक के बारे में
ImageToTextTask और VisionEngine की तुलना कैप्चा इनपुट, पहचान आउटपुट, मॉड्यूल की आवश्यकताएं और एप्लिकेशन जांच के आधार पर करें जब तक एक सॉल्वर टास्क चुनने से पहले नहीं।

CAPTCHA सॉल्वर पॉलिंग या वेबहुक्स चुनें कार्य स्थिति, प्राप्तकर्ता की आवश्यकताएं, परिणाम ताजगी, और दस्तावेज़ीकृत CapSolver API पूर्णता प्रवाह के उपयोग करके।
