npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@arkntools/depot-recognition

v1.8.1

Published

<div align="center">

Downloads

78

Readme

logo

Arkntools - Depot Recognition

Depot recognition module for Arknights Toolbox

NPM version GitHub license GitHub Workflow Status Feedback

中文文档

Install

# npm
npm i @arkntools/depot-recognition
# yarn
yarn add @arkntools/depot-recognition

Usage

You need to provide a zip of material images and sorting order of materials in deport. The name of the material must be material ID.

Resource Example

Node

const axios = require('axios').default;
const { sortBy } = require('lodash');
const {
  DeportRecognizer,
  isTrustedResult,
  toSimpleTrustedResult,
} = require('@arkntools/depot-recognition');

// You can implement your own caching logic
const getResources = async () => {
  const {
    data: { mapMd5 },
  } = await axios.get('https://data-cf.arkntools.app/check.json');
  const { data: fileMap } = await axios.get(`https://data-cf.arkntools.app/map.${mapMd5}.json`);

  const { data: item } = await axios.get(`https://data-cf.arkntools.app/data/item.${fileMap['data/item.json']}.json`);
  const { data: pkg } = await axios.get(`https://data-cf.arkntools.app/pkg/item.${fileMap['pkg/item.zip']}.zip`, {
    responseType: 'arraybuffer',
  });

  const getSortId = id => item[id].sortId.cn; // cn us jp kr
  const order = sortBy(Object.keys(item).filter(getSortId), getSortId);

  return { order, pkg };
};

(async () => {
  const dr = new DeportRecognizer(await getResources());
  const { data } = await dr.recognize(
    'https://github.com/arkntools/depot-recognition/raw/main/test/cases/cn_iphone12_0/image.png'
  );
  console.log(data.filter(isTrustedResult)); // full trust result
  console.log(toSimpleTrustedResult(data)); // simple trust result
})();

Web worker

Need comlink-loader

import DepotRecognitionWorker from 'comlink-loader!@arkntools/depot-recognition/worker';
import { isTrustedResult, toSimpleTrustedResult } from '@arkntools/depot-recognition/tools';
import { transfer } from 'comlink';
import { sortBy } from 'lodash';

// You can implement your own caching logic
const getResources = async () => {
  const fetchJSON = url => fetch(url).then(r => r.json());

  const { mapMd5 } = await fetchJSON('https://data-cf.arkntools.app/check.json');
  const fileMap = await fetchJSON(`https://data-cf.arkntools.app/map.${mapMd5}.json`);

  const item = await fetchJSON(`https://data-cf.arkntools.app/data/item.${fileMap['data/item.json']}.json`);
  const pkg = await fetch(`https://data-cf.arkntools.app/pkg/item.${fileMap['pkg/item.zip']}.zip`).then(r =>
    r.arrayBuffer()
  );

  const getSortId = id => item[id].sortId.cn; // cn us jp kr
  const order = sortBy(Object.keys(item).filter(getSortId), getSortId);

  return { order, pkg };
};

const initRecognizer = async () => {
  const { order, pkg } = await getResources();
  const worker = new DepotRecognitionWorker();
  return await new worker.DeportRecognizer(transfer({ order, pkg }, [pkg]));
};

(async () => {
  const dr = await initRecognizer();
  const { data } = await dr.recognize(
    'https://github.com/arkntools/depot-recognition/raw/main/test/cases/cn_iphone12_0/image.png' // can be blob url
  );
  console.log(data.filter(isTrustedResult)); // full trust result
  console.log(toSimpleTrustedResult(data)); // simple trust result
})();

We offer several types of imports:

  • @arkntools/depot-recognition/worker
    Basic import
  • @arkntools/depot-recognition/worker/index.importScriptsJsDelivr
    All dependencies are loaded from fastly.jsdelivr.net
  • @arkntools/depot-recognition/worker/index.noImportScripts
    No dependency loading, you need to call importScripts() by yourself

Typescript

If you are using comlink-loader in Typescript, you need to add a declaration:

declare module 'comlink-loader*!@arkntools/depot-recognition/worker' {
  import DepotRecognitionWorker from '@arkntools/depot-recognition/worker/comlinkLoader';
  export * from '@arkntools/depot-recognition/worker/comlinkLoader';
  export default DepotRecognitionWorker;
}

Then you can use it as normal:

import DepotRecognitionWorker, { RemoteDeportRecognizer } from 'comlink-loader!@arkntools/depot-recognition/worker';

let recognizer: RemoteDeportRecognizer | undefined;

(async () => {
  const worker = new DepotRecognitionWorker();
  recognizer = await new worker.DeportRecognizer(/* ... */);
})();

API

DeportRecognizer(config)

new DeportRecognizer(config)

Parameters

| Name | Type | Description | | ------ | --------------------------------------- | --------------- | | config | RecognizerConfig | Initial config. |

RecognizerConfig

| Name | Type | Description | | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | order | string[] | Item IDs, represent the sorting order of materials in deport. | | pkg | any | A zip of material images, which is a parameter or an array of parameters accepted by JSZip.loadAsync. | | preload | boolean | Preload resource from pkg. |

DeportRecognizer.recognize(file, onProgress): Object

Recognize deport image.

Parameters

| Name | Type | Description | | ---------- | ------------------ | ---------------------------------------------------------------------------------------------------- | | file | string \| Buffer | Image URL or buffer. Can be a blob URL. | | onProgress | Function | A callback function, will be called when progress update. Its argument is a number start from 0. |

Returns

| Name | Type | Description | | ----- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | data | SimilarityResult[] | Array of recognition similarity result. | | debug | string[] | Will contain some base64 images after using setDebug to set debug mode. |

SimilarityResult
{
  debug: {
    scale: number, // The scaling ratio when the material slice is scaled to 60 * 60
  },
  // Material position
  pos: {
    x: number, // Top left x
    y: number, // Top left y
    l: number, // Side length
    row: number, // Row
    col: number, // Column
  },
  // The distance ratio (0~1) between the four sides of the material and the four sides of the whole image
  view: {
    left: number,
    right: number,
    top: number,
    bottom: number,
  },
  // Similarity
  sim: {
    name: string, // ID of most similar material
    diff: number, // The degree of difference (0~1) between them
    // Comparative record of the material
    diffs: [
      [
        string, // Material ID
        number, // Difference degree
      ],
    ],
  },
  // Material quantity
  num: {
    img: string,   // Processed digital picture in base64
    text: string,  // The recognition result, may contain non-numeric characters such as spaces ( ) or underscores (_)
    value: number, // The numerical result after removing the non-numeric character, the default is 1 when the number is not recognized
    warn: boolean, // Whether the recognition result (text) is the same as the recognition number (value) after excluding the influence of spaces
  },
}

DeportRecognizer.setDebug(enable): void

Set debug mode.

Parameters

| Name | Type | Description | | ------ | --------- | ------------------------------------------------------------------ | | enable | boolean | Will output some base64 images in recognition result when enabled. |

DeportRecognizer.setOrder(order): void

Set the sorting order of materials.

Parameters

| Name | Type | Description | | ----- | ---------- | ------------------------------------------------------------- | | order | string[] | Item IDs, represent the sorting order of materials in deport. |

DeportRecognizer.preloadResource(): void

Preload resource from RecognizerConfig.pkg.

isTrustedResult(result): boolean

Determine whether a similarity result is trustable.

Parameters

| Name | Type | Description | | ------ | --------------------------------------- | ------------------------------ | | result | SimilarityResult | Recognition similarity result. |

toSimpleTrustedResult(data): Record<string, number>

Convert the similarity result array into a simple result object.

Parameters

| Name | Type | Description | | ---- | ----------------------------------------- | --------------------------------------- | | data | SimilarityResult[] | Array of recognition similarity result. |

Returns

| Name | Type | Description | | -------------------------------------------------- | -------- | --------------------- | | [SimilarityResult.sim.name] | number | Material ID: quantity |