커넥터 및 기능을 사용하여 지식 그래프 강화
15306 단어 typescriptyextwebdev
Answers API에서 반환된 각 이미지는 배경이 투명해야 할 때 흰색 배경을 가졌습니다. Cloudinary가 흰색 배경을 제거하는 데 사용할 수 있는 이미지 변환 API를 제공한다는 것을 알고 있었지만 내 Knowledge Graph . 이 기사에서는 Cloudinary Image Transformation API, a function plugin 및 Data Connector framework 을 사용하여 Knowledge Graph 데이터의 모든 이미지를 변환한 방법을 보여줍니다.
내 함수 플러그인 작성
내 Knowledge Graph의 모든 이미지는 투명 배경을 지원하지 않는 JPEG였습니다. 먼저 Cloudinarychained transformations를 사용하여 convert my images to PNGs을 사용한 다음 remove the white background을 사용해야 했습니다. Cloudinary 계정에 저장한 후 변환된 자산을 즉시 받기 위해 Eager Transformations을 사용하기로 했습니다.
myplugin folder structure을 생성한 후
uploadImageTransform
에 mod.ts
를 추가하여 변환 요청을 하고 새 URL을 반환합니다.// Chained, eager tranformation
const eager = "f_png,e_bgremoval";
const uploadImageAndTransform = async (
file: string,
public_id: string,
signature: string,
timestamp: number
): Promise<string> => {
console.log(`Uploading ${public_id} to Cloudinary and transforming ${file}`);
try {
const response = await axiod.post(
"https://api.cloudinary.com/v1_1/yext/image/upload",
{
file,
public_id,
api_key: CLOUDINARY_API_KEY,
eager,
signature,
timestamp,
},
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
);
return response.data.eager[0].url;
} catch (error) {
if (error.response) {
console.error(`${error.response.status}: ${error.response.data}`);
}
throw error;
}
};
Cloudinary의 변환 API는 각 요청에 대한 인증을 제공하기 위해 digital signature이 필요합니다. Cloudinary SDK를 사용하지 않기 때문에 web crypto API that is included with Deno을 사용하여 서명을 생성하는 자체 함수를 작성해야 했습니다.
const generateCloudinarySignature = async (params: string) => {
const data = new TextEncoder().encode(params);
const digest = await crypto.subtle.digest("sha-1", data.buffer);
return encodeToString(new Uint8Array(digest));
};
그런 다음 데이터 커넥터가 호출할 수 있도록
removeBackground
함수를 작성했습니다. 이 함수는 '|'로 표시될 것으로 예상되는 문자열을 허용합니다. public_id
는 Knowledge GraphentityId
로 사용되며 url
는 변환이 필요한 사진의 원래 URL입니다.export const removeBackground = async (input: string) => {
const timestamp = Math.floor(Date.now() / 1000);
const [public_id, url] = input.split("|");
const signature = await generateCloudinarySignature(
`eager=${eager}&public_id=${public_id}×tamp=${timestamp}${CLOUDINARY_API_SECRET}`
);
if (public_id && url) {
const imageUrl = await uploadImageAndTransform(
url,
public_id,
signature,
timestamp
);
return imageUrl;
}
};
test.ts
에 함수를 작성하여 내 Knowledge Graph의 이미지 중 하나에 대해 변환이 작동하는지 확인했습니다.const testInput =
"beer_60|https://a.mktgcdn.com/p-sandbox/rrK5bxcoVAgkGckDnA7GlhyC1VOpV6eEf4KjjlFumQs/400x600.jpg";
Deno.test("test remove background", async () => {
const newUrl = await removeBackground(testInput);
console.log(newUrl);
});
데이터 커넥터에 함수 플러그인 적용
함수 플러그인을 Yext 계정에 업로드한 후 Knowledge Graph Entities: Get API을 사용하여 내 계정에서 엔터티를 가져오기 위한 소스로 "Pull from API"가 포함된 새 데이터 커넥터를 만들었습니다. 또한 Data Connector가 Entities API에 요청할 수 있도록 API 키를 얻기 위해 Developer Console에서 앱을 생성해야 했습니다.
선택기를 자동 생성한 다음 열 병합 변환을 적용하여
entityId
및 primaryPhoto.image.url
를 변환된 이미지라는 새 열로 결합했습니다.새 열을 가져와 내
removeBackground
함수를 적용했습니다.마지막으로
meta.id
를 다시 entityId로 매핑하여 기존 엔터티를 편집하고 있으며 기본 사진 이미지 URL을 새 URL로 대체하고 있음을 커넥터에 알렸습니다.새로 만든 커넥터를 실행했는데 5분도 안 되어 완료되었습니다. 앱 홈 화면을 새로 고치면 흰색 배경이 사라졌습니다.
결론
변환된 이미지를 가져오고 싶을 때마다 React 애플리케이션에서 Cloudinary에 요청할 수 있는 옵션이 있었습니다. 그러나 저는 이미 Answers API를 통해 지식 정보에서 항목을 가져오고 있습니다. Cloudinary에 추가 요청을 하면 한 달을 잡아먹을 것입니다bandwidth allotment . 이것이 프로덕션 애플리케이션이라면 무료 계정 할당량을 꽤 빨리 검토할 것입니다. 이렇게 하면 커넥터 실행에서 각 이미지에 대한 초기 요청을 할 때만 리소스를 가져옵니다.
이 예제는 더 복잡한 이미지 변환을 적용하도록 확장될 수 있습니다. 추가 지식 그래프 향상을 위해 다른 API를 호출하는 별도의 함수를 업로드할 수도 있습니다.
함수here의 전체 코드를 확인하고 데이터 커넥터here에 대해 자세히 알아볼 수 있습니다.
Reference
이 문제에 관하여(커넥터 및 기능을 사용하여 지식 그래프 강화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yext/enriching-a-knowledge-graph-using-connectors-and-functions-134m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)