Skip to content

Commit 7d3187d

Browse files
Laura DevendorfLaura Devendorf
authored andcommitted
integrating ml into operations
1 parent c59017a commit 7d3187d

File tree

5 files changed

+100
-41
lines changed

5 files changed

+100
-41
lines changed

src/app/core/model/util.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,42 @@ class Util {
729729
return visited_systems;
730730
}
731731

732+
public patternToSize(pattern, warpSize, weftSize) {
733+
if (pattern[0].length > warpSize) {
734+
for (var i = 0; i < pattern.length; i++) {
735+
while(pattern[i].length > warpSize) {
736+
pattern[i].splice(pattern[i].length-1, 1);
737+
}
738+
}
739+
}
740+
if (pattern.length > weftSize) {
741+
while(pattern.length > weftSize) {
742+
pattern.splice(pattern.length-1, 1);
743+
}
744+
}
745+
var idx = 0;
746+
while (pattern[0].length < warpSize) {
747+
for (var j = 0; j < pattern.length; j++) {
748+
if (idx < pattern[j].length) {
749+
pattern[j].push(pattern[j][idx]);
750+
}
751+
}
752+
idx += 1;
753+
if (idx >= pattern[0].length) {
754+
idx = 0;
755+
}
756+
}
757+
idx = 0;
758+
while (pattern.length < weftSize) {
759+
pattern.push(pattern[idx]);
760+
idx += 1;
761+
if (idx >= pattern.length) {
762+
idx = 0;
763+
}
764+
}
765+
return pattern;
766+
}
767+
732768

733769
}
734770

src/app/core/provider/patternfinder.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ private findDraftPatterns(treadlingPatterns, treadling, threadingPatterns, threa
261261
var treadlingString: string = this.toString(treadling);
262262
var threadingString: string = this.toString(threading);
263263

264+
264265
var treadlingRanges = [];
265266
var threadingRanges = [];
266267

@@ -327,6 +328,7 @@ private findDraftPatterns(treadlingPatterns, treadling, threadingPatterns, threa
327328
}
328329

329330
public computePatterns(threading, treadling, draft) {
331+
330332
let threadingPatterns = this.findPatterns(threading);
331333
let treadlingPatterns = this.findPatterns(treadling);
332334

src/app/core/provider/vae.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ export class VaeService {
1515
constructor() { }
1616

1717
async loadModels(collection: string) {
18+
console.log("collection", collection);
1819
this.decoder = await tf.loadLayersModel('../../../assets/' + collection + '/decoder/model.json');
1920
this.encoder_log_var = await tf.loadLayersModel('../../../assets/' + collection + '/encoder_log_var/model.json');
2021
this.encoder_mean = await tf.loadLayersModel('../../../assets/' + collection + '/encoder_mean/model.json');
21-
console.log('ML models loaded');
22+
}
23+
24+
printDecoder(){
25+
console.log(this.decoder);
2226
}
2327

2428
cleanDraft(draft) {

src/app/mixer/palette/operation/operation.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ export class OperationComponent implements OnInit {
155155

156156
const draft_map: Array<DraftMap> = [];
157157
const generated_drafts: Array<Draft> = this.op.perform(inputs, this.op_inputs.map(fc => fc.value));
158+
console.log("returned", generated_drafts)
158159
generated_drafts.forEach((draft, ndx) => {
159160
const component_id:number = (this.outputs[ndx] === undefined) ? -1 : this.outputs[ndx].component_id;
160161

src/app/mixer/provider/operation.service.ts

Lines changed: 56 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { D } from '@angular/cdk/keycodes';
22
import { Injectable, Input } from '@angular/core';
33
import { Cell } from '../../core/model/cell';
44
import { Draft } from "../../core/model/draft";
5-
import { VaeService} from "../../core/provider/vae"
6-
import { PatternfinderService} from "../../core/provider/patternfinder"
5+
import { VaeService} from "../../core/provider/vae.service"
6+
import { PatternfinderService} from "../../core/provider/patternfinder.service"
77
import utilInstance from '../../core/model/util';
8+
import { Loom } from '../../core/model/loom';
89

910
export interface OperationParams {
1011
name: string,
@@ -1425,45 +1426,54 @@ export class OperationService {
14251426
],
14261427
max_inputs: 1,
14271428
perform: (inputs: Array<Draft>, input_params: Array<number>):Array<Draft> => {
1428-
return [];
1429-
1430-
// this.vae.loadModels('german').then(() => {
1431-
// if (this.generativeMode) {
1432-
// this.vae.loadModels(this.collection);
1433-
// let pattern = this.patternFinder.computePatterns(this.loom.threading, this.loom.treadling, this.draft.pattern);
1434-
// var suggestions = [];
1435-
// let draftSeed = this.patternToSize(pattern, this.warpSize, this.weftSize);
1436-
// this.vae.generateFromSeed(draftSeed).then(suggestionsRet => {
1437-
// suggestions = suggestionsRet;
1438-
// console.log('suggestions:', suggestions);
1439-
// for (var i = 0; i < suggestions.length; i++) {
1440-
// let treadlingSuggest = this.patternFinder.getTreadlingFromArr(suggestions[i]);
1441-
// let threadingSuggest = this.patternFinder.getThreadingFromArr(suggestions[i]);
1442-
// let pattern = this.patternFinder.computePatterns(threadingSuggest, treadlingSuggest, suggestions[i])
1443-
// let draft = new Draft({});
1444-
// for (var i = 0; i < pattern.length; i++) {
1445-
// var first = false;
1446-
// if (i != 0) {
1447-
// draft.pattern.push([]);
1448-
// } else {
1449-
// first = true;
1450-
// }
1451-
// for (var j = 0; j < pattern[i].length; j++) {
1452-
// if (first && j == 0) {
1453-
// draft.pattern[i][j] = new Cell(pattern[i][j] == 1 ? true : false);
1454-
// } else {
1455-
// draft.pattern[i].push(new Cell(pattern[i][j] == 1 ? true : false));
1456-
// }
1457-
// }
1458-
// }
1459-
// this.generated_drafts.push(draft);
1460-
// }
1461-
// });
1462-
// }
1463-
// });
1464-
// }
1465-
14661429

1430+
1431+
if(inputs.length == 0) return [];
1432+
let generated: Array<Draft> = [];
1433+
1434+
inputs.forEach(draft => {
1435+
1436+
this.vae.loadModels('german').then(() => {
1437+
this.vae.printDecoder();
1438+
const loom:Loom = new Loom(draft, 8, 10);
1439+
loom.recomputeLoom(draft);
1440+
let pattern = this.pfs.computePatterns(loom.threading, loom.treadling, draft.pattern);
1441+
1442+
var suggestions = [];
1443+
let draftSeed = utilInstance.patternToSize(pattern, 48, 48);
1444+
this.vae.generateFromSeed(draftSeed).then(suggestionsRet => {
1445+
suggestions = suggestionsRet;
1446+
1447+
for (var i = 0; i < suggestions.length; i++) {
1448+
let treadlingSuggest = this.pfs.getTreadlingFromArr(suggestions[i]);
1449+
let threadingSuggest = this.pfs.getThreadingFromArr(suggestions[i]);
1450+
let pattern = this.pfs.computePatterns(threadingSuggest, treadlingSuggest, suggestions[i])
1451+
const draft:Draft = new Draft({warps: pattern[i].length, wefts: pattern.length});
1452+
for (var i = 0; i < pattern.length; i++) {
1453+
// var first = false;
1454+
// if (i != 0) {
1455+
// draft.pattern.push([]);
1456+
// } else {
1457+
// first = true;
1458+
// }
1459+
1460+
for (var j = 0; j < pattern[i].length; j++) {
1461+
// if (first && j == 0) {
1462+
// draft.pattern[i][j] = new Cell(pattern[i][j] == 1 ? true : false);
1463+
// } else {
1464+
// draft.pattern[i].push(new Cell(pattern[i][j] == 1 ? true : false));
1465+
draft.pattern[i][j].setHeddle((pattern[i][j] == 1 ? true : false));
1466+
// }
1467+
}
1468+
}
1469+
1470+
console.log("returning", draft, [draft])
1471+
generated.push(draft);
1472+
return [draft];
1473+
}
1474+
});
1475+
});
1476+
});
14671477

14681478
}
14691479

@@ -1503,6 +1513,7 @@ export class OperationService {
15031513
this.ops.push(overlay);
15041514
this.ops.push(atop);
15051515
this.ops.push(mask);
1516+
this.ops.push(germanify);
15061517
// this.ops.push(reverse);
15071518

15081519

@@ -1528,6 +1539,11 @@ export class OperationService {
15281539
ops: [mirror, interlace, layer, tile, joinleft, selvedge,atop, overlay, mask, bindweftfloats, bindwarpfloats]}
15291540
);
15301541

1542+
this.classification.push(
1543+
{category: 'machine learning',
1544+
ops: [germanify]}
1545+
);
1546+
15311547
}
15321548

15331549

0 commit comments

Comments
 (0)