Getting the Boolean Expression from a hand drawn l

2020-07-27 06:36发布

问题:

By using tensorflow I identified all the gates, letters and nodes. When identifying all above components, it draws a rectangle box around each component.

Therefore, in following array it contains list of all the components detected. Each list consists in following order.

Name of component 

X, Y coordinates of top  left corner of rectangle 

X, Y coordinates of right bottom of rectangle 

Nodes (Black Points) are used to indicate a bridge over a line without crossing.

Array of all above components.

labels =[['NODE',(1002.9702758789062, 896.4686675071716), (1220.212585389614, 1067.1142654418945)], ['NODE',(1032.444071739912, 635.7160077095032),(1211.6839590370655, 763.4382424354553)],['M', (57.093908578157425,607.6229677200317),(311.9765570014715,833.807623386383)],['NODE', (344.5295810997486, 806.3690414428711), (501.8982524871826, 930.6454839706421)], ['Z', (21.986433800309896, 1327.9791088104248), (266.36098374426365, 1565.158670425415)], ['OR', (476.0066536962986, 574.401759147644), (918.3125713765621, 1177.1423168182373)], ['NODE', (333.50814148783684, 1058.0092916488647), (497.6142471432686, 1202.9034795761108)], ['K', (37.06201596558094, 870.0414619445801), (311.77860628068447, 1105.8665227890015)], ['AND', (665.9987451732159, 1227.940999031067), (1062.7052736580372, 1594.6843948364258)],['AND', (1373.9987451732159, 204.940999031067), (1703.7052736580372, 612.6843948364258)], ['NOT', (694.2882044911385, 260.5083291530609), (1027.812717139721, 450.35294365882874)], ['XOR', (2027.6711627840996, 593.0362477302551), (2457.9011510014534, 1093.9836854934692)], ['J', (85.69029207900167, 253.8458535671234), (334.48535946011543, 456.5887498855591)], ['OUTPUT', (2657.3825285434723, 670.8418045043945), (2929.8974316120148, 975.4852895736694)]]

Then by using line detection algorithm I identified all the 17 lines connecting each component. All above 17 lines take as a list of arrays, and those lines are not in a correct order and each line has 2 end points.

lines = [[(60, 1502), (787, 1467)], [(125, 1031), (691, 988)], [(128, 772), (685, 758)], [(131, 336),(709,347)], [(927,350),(1455, 348)],  [(400, 1361), (792, 1369)], [(834, 843), (2343, 939)], [(915, 1430), (1119, 1424)], [(1125, 468), (1453, 470)],  [(1587, 399), (1911, 405)], [(1884, 755), (2245, 814)],[(2372, 831), (2918, 859)], [(1891, 397), (1901, 767)],  [(1138, 457), (1128, 738)], [(441, 738), (421, 903)], [(1125, 946), (1101, 1437)], [(420, 1098), (408, 1373)]] 

When connecting those lines, it is must to consider following scenario. It means nodes are used to indicate a bridge without crossing lines.

M is an input to the AND gate and (M.Z) is an input to the other AND gate.

So how can I generate the following Boolean Expression by using above 2 arrays and above scenario? And also, it can be able to derive for all the seven logic gates.

It can be assumed that image is always going to read from left to right.