Close
0%
0%

Narcissus 12.0

This project will explore a number of issues that are involved in creating a personality for an interactive chat-bot or actual robot.

Similar projects worth following
I'm thinking of trying to create an AI-driven chatbot that is good enough to work as a personality module for an actual physical robot, or else more simply as the primary interface for some kind of avatar. Recent advances in video generation suggest that highly realistic real-time virtual interactions are becoming feasible. While there is plenty of open-source material out there, I still prefer to roll my own from scratch, insofar as might be possible.

I have chosen Narcissus as the name for this project not because Narcissus was known for falling in love with his reflection, even until the point that he turned to stone; but because of the fate of his love "Echo" who pined away for the love of Narcissus, that is, until only HER voice remained. So, it is for the sake of Echo that I choose Narcissus, which seems gender-neutral enough on the one hand; whilst the version number should "reflect" the fact that this is my 12th Hackaday project.

This is a very ambitious project, which has many important parts, which I should perhaps list here, in no particular order.

1. In an earlier project, I was experimenting with the idea of "Digital DNA", and then I realized that I have all of the pieces that I need to perhaps draw photo-realistic hair, whether it is straight hair, curly hair, kinky - twisted braided hair, or whatever else might be imaginable; well, you get the idea - hopefully.  Maybe I can combine the code for drawing Mobius loops, with the code from drawing DNA, which I in turn derived from "gears", in such a way as to generate certain types of visual imagery; that is - without having to "train" on celebrity data, or otherwise engage in any sort of non-consensual scraping of third-party content, like - well "you know who" is in the habit of doing.

2. A chat engine of sorts is mostly complete, and I have largely written it from scratch.  It is just a matter of training it on a larger data set, as well as taking some of the functionality to a more integrated level.  There are a number of efficiency improvements that I figured out based on the theory of polyphase filter trees as they are sometimes used in DSP work, which carry over quite nicely.  Especially the O(N*log(N)) stuff for doing chirp-Z transforms when it is intended for extra dimensions.

3. Hardware aspects are of course, still all over the map; with ideas running that maybe I could do some Pi-based stuff, just to prove that it can be done, or do a simple interactive avatar that runs on a propeller, or a tablet or phone.  Oh, and let's not forget how much fun it would be to play "Global Thermonuclear War" on a REAL ALTAIR. 

4. Remember, a design is not perfect until there is nothing more to be added.  A design is "perfect" when there is nothing left that can be removed.  Nonetheless, it occurs to me that this is a lot of code that has to be done entirely from scratch, especially if I want to support platforms like FPGA-based systems, bare-metal Propeller or Pi, and so on.  So, a lot of stuff like tessellation will have to be done in the "model space" as it were, and not merely left to open-GL.

... of course, this will also have implications concerning not only any prospects for avatar generation but so also as far a concerning any contemplated 3-D printing of stuff, just in case it ever gets that far!  Oh, what fun!

5. Then there are those pesky philosophic implications, like when someone wrote to me and asked if I thought that we might be alone in the universe, believe it or not. So even though I posted some of this elsewhere online right before Halloween, I figure I might as well also share that answer here, without getting into the subject of how much I like "mesh". Mesh, of course, is whatever it is, irrespective of its connections to lattice quantum chromodynamics, or anything like that. Most likely we are not alone - but is there organic life elsewhere? Either we are alone in that sense, or life is pretty much ubiquitous.

6. Borrowing from the idea of "Digital DNA" then, I think that the complexity of the genetic code seems to point to "irreducible complexity" since that is a kind of chicken and egg problem. Which came first, the ribosome or the genetic code? Or if the universe is an intelligent design, even though that does not prove that God is all-powerful, or anything else, it proves that there has always been something.  The genetic code is encoded in DNA, but you need functioning ribosomal proteins to transcribe that code into more ribosomal proteins before you can copy any other proteins. That gets into how many "bits of information entropy" is needed or else if you made random combinations of molecules, there aren't enough atoms in the universe to have even a random chance of evolving a single insulin molecule, let alone the DNA sequence needed to translate the DNA sequence that encodes the proteins, etc., unless you have...

Read more »

  • Some shapes of things to come, among other things.

    glgorman5 days ago 0 comments

    Yeah, and in other news: I found my ancient IBM flowcharting template.

    So while I have never been a big fan of flow charts, this might be a fun digression, given my latest obsession with DNA, hair, solar flares, and tessellations, with or without help from Euclid - of course.  Weird to contemplate that there are different pre-defined symbols for magnetic vs. paper tape input, or else manual input vs. punch cards, and so on.  A process seems to be a simple rectangle, whereas I/O operations are these other parallelograms.  Yeah, yeah, yeah.  And so it goes.

  • Whether it is Greek to You or Me ...

    glgorman05/10/2024 at 05:18 0 comments


    So, I found a copy of Euclid's Elements online and started reviewing some of the classic geometric methods., and then I got an interesting idea.  How hard would it be to implement all 200 or so proofs, or however many there are, in C++?  Of course, when working with computer graphics we have to proceed analytically, but that doesn't mean that we can't, at least in principle come up with ways to do some of the traditional compass and straight-edge constructions, that everyone seems to have forgotten with all of the 3-D mania.  Then again, there are some things quite wonderful and elegant about triangles, that are perhaps, underappreciated.  Like the fact we can subdivide a triangle by bisecting the edges, or else we can subdivide a triangle by bisecting the angles, and the results are not necessarily the same! Much to the surprise of many, no doubt! 

    ////////////////////////////////////////////////////////////////////
    //
    // PROP. IX.—Problem.
    // To bisect a given rectilineal angle (BAC).
    //
    // THE ELEMENTS OF EUCLID - Translated by John Casey
    // Published 1887 by Cambridge Press, public domain.
    //
    ////////////////////////////////////////////////////////////////////
    
    MATH_TYPE fpoint::law_of_cosines (const fpoint &p1,
    const fpoint &p2, const fpoint &p3)
    {
        MATH_TYPE A,bc,a2,b2,c2;
        MATH_TYPE dx1,dy1,dx2,dy2,dx3,dy3;
        MATH_TYPE result;
        dx1 = p2.x-p3.x;
        dy1 = p2.y-p3.y;
        a2 = (dx1dx1)+(dy1dy1);
        dx2 = p1.x-p2.x;
        dy2 = p1.y-p3.y;
        b2 = (dx2dx2)+(dy2dy2);
        dx3 = p1.x-p3.x;
        dy3 = p1.y-p3.y;
        c2 = (dx3dx3)+(dy3dy3);
        bc = sqrt(b2c2);
        result = (b2+c2-a2)/(2bc);
        return result;
    }

     Well, here it is, therefore, in all of its glory - as we saw earlier, at least one method for subdividing triangles must be lurking somewhere, and by invoking such a process more or less recursively, we might want to consider how this can be extended to perhaps offer at least one way of generating the point cloud for a full head of hair, or a field of grass, or whatever else might come to the imagination.  Solar flares anyone?

    What else might you be expecting? And then along came a spider, maybe?  That also seems doable!  There are so many different ways to build our model space, and not just with triangles or quads.  It might also be as if a web or a mesh might represent something else altogether, just like the fabric of space-time itself. This thought is so deep and so perfect, that when we contemplate the meaning of it - the perfect entanglement that is, in some other realm.

    WARNING:  While the law of cosines method that I have described here seems to work most of the time, that is for most well-behaved triangles in the first quadrant, some tringles with obtuse angles. or other issues seem to give incorrect results, such as returning angle bisectors that are perpendicular to the correct angles.   In the meantime, have fun with this if you dare, since what I want to do with it is figure out a way to generate the bisectors, as well as do a bunch of other constructions, where feasible that is, without requiring any branches in the code!  And THAT is not at all as simple as it might seem when having to not only contemplate quadrant issues, obtuseness, rotations, etc.  Nonetheless, for purposes of CUDA style or OpenMP style parallelism, and/or pipelining, the more useful work that can be done without needing to have conditional logic, obviously should produce a substantial benefit when the problem at hand is put to scale, regardless of architecture.

View all 2 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates