extractImagePatches.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { __awaiter, __generator } from "tslib";
  2. import * as tf from '@tensorflow/tfjs-core';
  3. import { createCanvas, createCanvasFromMedia, getContext2dOrThrow } from '../dom';
  4. import { env } from '../env';
  5. import { normalize } from './normalize';
  6. export function extractImagePatches(img, boxes, _a) {
  7. var width = _a.width, height = _a.height;
  8. return __awaiter(this, void 0, void 0, function () {
  9. var imgCtx, bitmaps, imagePatchesDatas;
  10. var _this = this;
  11. return __generator(this, function (_b) {
  12. switch (_b.label) {
  13. case 0:
  14. imgCtx = getContext2dOrThrow(img);
  15. return [4 /*yield*/, Promise.all(boxes.map(function (box) { return __awaiter(_this, void 0, void 0, function () {
  16. var _a, y, ey, x, ex, fromX, fromY, imgData;
  17. return __generator(this, function (_b) {
  18. _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex;
  19. fromX = x - 1;
  20. fromY = y - 1;
  21. imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY));
  22. return [2 /*return*/, env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)];
  23. });
  24. }); }))];
  25. case 1:
  26. bitmaps = _b.sent();
  27. imagePatchesDatas = [];
  28. bitmaps.forEach(function (bmp) {
  29. var patch = createCanvas({ width: width, height: height });
  30. var patchCtx = getContext2dOrThrow(patch);
  31. patchCtx.drawImage(bmp, 0, 0, width, height);
  32. var data = patchCtx.getImageData(0, 0, width, height).data;
  33. var currData = [];
  34. // RGBA -> BGR
  35. for (var i = 0; i < data.length; i += 4) {
  36. currData.push(data[i + 2]);
  37. currData.push(data[i + 1]);
  38. currData.push(data[i]);
  39. }
  40. imagePatchesDatas.push(currData);
  41. });
  42. return [2 /*return*/, imagePatchesDatas.map(function (data) {
  43. var t = tf.tidy(function () {
  44. var imagePatchTensor = tf.transpose(tf.tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat();
  45. return normalize(imagePatchTensor);
  46. });
  47. return t;
  48. })];
  49. }
  50. });
  51. });
  52. }
  53. //# sourceMappingURL=extractImagePatches.js.map